epoch time

Epoch หรือ Unix Epoch คือ

ปัจจุบันการระบุวันเวลามีด้วยกันหลายวิธีหรือหลายรูปแบบ และ หน่วยวัดที่หลากหลายเช่น ปี, เดือน, วัน, ชั่วโมง, นาที, วินาที เป็นสาเหตุให้หลายท่านอาจจะได้ยินและสงสัยคำว่า Epoch  หรือ Unix Epoche คือ อะไร เนื่องจากรูปแบบการระบุเวลายังไม่มีมาตราฐานชัดเจน แต่สำหรับการเขียน program ที่จำเป็นต้องอ้างอิงวันเวลา รวมถึงการคำนวณในหน่วยเวลาที่เป็นมาตราฐานเดียวกัน Epoch จึงเป็นมาตราฐานอย่างนึงในการระบุเวลา โดยการอ้างอิงระยะห่างจากวันที่ใช้อ้างอิง จนถึงวันที่กำหนดเป็นหน่วยวินาที ส่วนช่วงเวลาที่ก่อนหน้านั้นจะใช้เป็นค่าลบแทน ซึ่งวันที่ใช้อ้างอิงดังกล่าวมีได้หลายแบบขึ้นอยู่กับ software ที่ใช้งาน เช่น วันที่ UTC (00:00)  January 1, 1900 เป็นเวลามาตราฐานของ Network Time Protocol (NTP) แต่ ที่เรานิยมพูดถึงหรือใช้งานกับ Unix, Linux หรือ programming ซึ่ง Unix Epoch จะมีวันที่อ้างอิงคือ January 1, 1970 นั้นหมายถึงว่า 1 วันถัดไปจะมีค่าเท่ากับ 60 x 60 x 24 = 86,400 วินาที ซึ่ง Unix Epoch คือ วันที่ January 2, 1970 ด้วยนั้นเอง

ตัวอย่างเช่น

  • 01 Jan 1970 00:00:00 GMT  ค่า Unix Epoch เท่ากับ 0
  • 02 Jan 1970 00:00:00 GMT ค่า Unix Epoch เท่ากับ 86400
  • 01 Jan 1971 00:00:00 GMT ค่า Unix Epoch เท่ากับ 31536000
  • 21 May 2017 18:00:00 GMT ค่า Unix Epoch เท่ากับ 1495389600

จากข้อมูลที่อธิบายมาจะเห็นว่า Epoch หรือ Unix Epoch คือ การระบุจุดของเวลา รวมถึงสามารถบอกระยะห่างของเวลาดังกล่าวในหน่วยวินาทีได้อีกด้วย และการที่ programming นิยมใช้ Epoch หรือ Unix Epoch คือ สำหรับการเก็บค่าของเวลาเพราะ เมื่อเราทำการคำนวณหาระยะเวลาของเวลา 2 ช่วง เราสามารถนำค่า Epoch มาลบกันโดยตรงทางวิธีคณิตศาสตร์ออกมาได้ทันที ซึ่งง่ายต่อการเขียน program มาก

ทดลองแปลงค่าผ่านเว็ป epoch converter ได้ครับ

 

วิธีการหาค่า Epoch หรือ Unix Epoch

Unix Linux command

$ date +%s
1495390618

Programming language

Language Command
  Perl   time
  PHP   time()
  Ruby   Time.now (or Time.new). To display the epoch: Time.now.to_i
  Python   import time first, then int(time.time())
  Java   long epoch = System.currentTimeMillis()/1000;
  Microsoft .NET C#   epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
  VBScript/ASP   DateDiff("s", "01/01/1970 00:00:00", Now())
  Erlang   calendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time( now()))-719528*24*3600.
  OR
  element(1, now()) * 10000 + element(2, now()).
  MySQL   SELECT unix_timestamp(now())
  PostgreSQL   SELECT extract(epoch FROM now());
  Oracle PL/SQL   SELECT (SYSDATE - TO_DATE('01-01-1970 00:00:00', 'DD-MM-YYYY HH24:MI:SS')) *
24 * 60 * 60 FROM DUAL
  SQL Server   SELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
  JavaScript   Math.round(new Date().getTime()/1000.0)getTime() returns time in milliseconds.
  Unix/Linux Shell   date +%s
  PowerShell   Get-Date -UFormat "%s"Produces: 1279152364.63599
  Actionscript   (new Date()).time
  Other OS’s   Command line: perl -e "print time" (If Perl is installed on your system)
  ColdFusion (CFML) MX 6.1+   #int( getTickCount() / 1000 )#
  Bash   Command Line: date +%s

 

ตารางวันที่อ้างอิงของ Epoch program

Epoch date Notable uses Rationale for selection
January 0, 1 BC   MATLAB  
January 1, AD 1   Microsoft.NET, Go, REXX, Rata Die   Common Era, ISO 2014, RFC 3339
January 1, 1601   NTFS, COBOL, Win32/Win64   1601 was the first year of the 400-year Gregorian calendar cycle at the time Windows NT was made.
December 31, 1840   MUMPS programming language   1841 was a non-leap year several years before the birth year of the oldest living US citizen when the language was designed.
November 17, 1858   VMS, United States Naval Observatory, DVB-SI 16-bit day stamps, other astronomy-related computations   November 17, 1858, 00:00:00 UT is the zero of the Modified Julian Day (MJD) equivalent to Julian day 2400000.5
December 30, 1899   Microsoft COM DATE, Object Pascal, LibreOffice Calc, Google Sheets   Technical internal value used by Microsoft Excel; for compatibility with Lotus 1-2-3.
December 31, 1899   Microsoft C/C++ 7.0   A change in Microsoft’s last version of non-Visual C/C++ that was subsequently reverted.
January 0, 1900   Microsoft Excel, Lotus 1-2-3   While logically January 0,1900 is equivalent to December 31, 1899, these systems do not allow users to specify the latter date.
January 1, 1900   Network Time Protocol, IBM CICS, Mathematica, RISC OS, VME, Common Lisp, Michigan Terminal System  
January 1, 1904 ,   LabVIEW, Apple Inc.’s classic Mac OS, Palm OS, MP4, Microsoft Excel (optionally), IGOR Pro   1904 is the first leap year of the 20th century.
December 31, 1967   Pick OS and variants (jBASE, Universe, Unidata, Revelation, Reality)   Chosen so that (date mod 7) would produce 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, and 6=Saturday.
January 1, 1970   Unix Epoch aka POSIX time, used by Unix and Unix-like systems (Linux, macOS), and programming languages: most C/C++ implementations, Java, JavaScript, Perl, PHP, Python, Ruby, Tcl, ActionScript. Also used by Precision Time Protocol.  
January 1, 1980   IBM BIOS INT 1Ah, DOS, OS/2, FAT12, FAT16, FAT32, exFAT filesystems The IBM PC with its BIOS as well as 86-DOS, MS-DOS and PC DOS with their FAT12 file system were developed and introduced between 1980 and 1981
January 6, 1980   Qualcomm BREW, GPS, ATSC 32-bit time stamps GPS counts weeks (a week is defined to start on Sunday) and January 6 is the first Sunday of 1980.
January 1, 2000   AppleSingle, AppleDouble, PostgreSQL, ZigBee UTCTime  
January 1, 2001   Apple’s Cocoa framework 2001 is the year of the release of Mac OS X 10.0 (but NSDate for Apple’s EOF 1.0 was developed in 1994).

 

 

Author: Suphakit Annoppornchai

Credit: https://saixiii.com, https://en.wikipedia.org

 

Leave a Reply