計算機科學計算機編程中,系統時間表示在計算機系統中的時間與日期。通常用系統時鐘(system clock)從某個時間起點英語epoch (reference date)的嘀嗒數(number of ticks)。例如,類Unix系統採用世界標準時1970年1月1日00:00:00開始的秒數(不考慮閏秒)作為UNIX時間Windows API使用SYSTEMTIME表示年月日時分秒毫秒;使用FILETIME表示自世界標準時1601年1月1日00:00:00開始的100納秒為單位的時鐘嘀嗒數。

Unix命令date

系統時間可以轉化為日曆時間以適合人去理解。例如Unix時間1000000000對應於日曆時間2001年9月9日 01:46:40 UT

獲取系統時間 編輯

下述均採用格里高利曆外推格里高利曆英語Proleptic Gregorian calendar。(*)表示依賴於系統實現。

22 4月 2024 13:28:32 UTC

本網頁生成時的系統時間
點擊此處以刷新時間

操作系統 編輯

操作系統 命令或函數 分辨率 時間起點英語epoch (reference date)或範圍
Android java.lang.System.currentTimeMillis() 1 ms 起始於1970年1月1日
BIOS (IBM PC) INT 1Ah, AH=00h[1] 54.931 ms
18.204 Hz
當天午夜
INT 1Ah, AH=02h[2] 1 s 當天午夜
INT 1Ah, AH=04h[3] 1 day 1980年1月1日至1999年12月31日

或至2079年12月31日(視系統而定)

CP/M Plus System Control Block:[4]
scb$base+58h, Days since 1 Jan 1978
scb$base+5Ah, Hour (BCD)
scb$base+5Bh, Minute (BCD)
scb$base+5Ch, Second (BCD)
1 s 1978年1月1日只2067年12月
BDOS function 69h (T_GET):[5]
word, Days since 1 January 1978
byte, Hour (BCD)
byte, Minute (BCD)
byte, Second (BCD)
DOS (Microsoft) C:\>DATE
C:\>TIME
10 ms 1980年1月1日至2099年12月31日
INT 21h, AH=2Ch SYSTEM TIME[6]
INT 21h, AH=2Ah SYSTEM DATE[7]
iOS (Apple) CFAbsoluteTimeGetCurrent()[8] < 1 ms 2001年1月1日前後一萬年
Mac OS (Apple) CFAbsoluteTimeGetCurrent()[9] < 1 ms[10][note 1] 2001年1月1日前後一萬年[10][note 1]
OpenVMS (HP) SYS$GETTIM() 100 ns 1858年11月17日至公元31086年
z/OS (IBM) STCK[11] 2−12 μs
244.14 ps[12]
1900年1月1日至世界時2042年9月17日[13]
Unix, POSIX
(參見C date and time functions)
$date
time()
1 s (*)

1970年1月1日至2038年1月19日
1970年1月1日至公元292277026596年

gettimeofday() 1 μs
clock_gettime() 1 ns
Windows (Microsoft) GetSystemTime() 1 ms 1601年1月1日至公元30828年
GetSystemTimeAsFileTime() 100 ns[14]

程序設計語言與軟件 編輯

操作系統 命令或函數 分辨率 時間起點英語epoch (reference date)或範圍
Ada Ada.Calendar.Clock 100 μs to
20 ms (*)
1901年1月1日至2099年12月31日(*)
AWK systime() 1 s (*)
BASIC, True BASIC DATE, DATE$
TIME, TIME$
1 s (*)
Business BASIC英語Business BASIC DAY, TIM 0.1 s (*)
C (參見C date and time functions) time() 1 s (*)[note 2] (*)[note 2]
C++ std::time()
std::chrono::system_clock::now()
1 s (*)[note 2]
1 ns (C++11, OS dependent)
(*)[note 2]
C# (Microsoft) System.DateTime.Now[15]
System.DateTime.UtcNow[16]
100 ns[17] 0001年1月1日至9999年12月31日
CICS (IBM) ASKTIME 1 ms 1900年1月1日
COBOL FUNCTION CURRENT-DATE 1 s 1601年1月1日
COM COleDateTime 毫秒級[18] 100年1月1日-9999年12月31日
Common Lisp (get-universal-time) 1 s 1900年1月1日
Delphi (Borland) date
time
1 ms
(floating point)
1900年1月1日
Delphi
(Embarcadero Technologies英語Embarcadero Technologies)[19]
System.SysUtils.Time[20] 1 ms 0/0/0000 0:0:0:000至12/31/9999 23:59:59:999 [sic]
System.SysUtils.GetTime[21](alias for System.SysUtils.Time)
System.SysUtils.Date[22] 0/0/0000 0:0:0:000至12/31/9999 0:0:0:000 [sic]
System.DateUtils.Today[23]
System.DateUtils.Tomorrow[24]
System.DateUtils.Yesterday[25]
System.SysUtils.Now[26] 1 s 0/0/0000 0:0:0:000至12/31/9999 23:59:59:000 [sic]
System.SysUtils.DayOfWeek[27] 1 day 1至7
System.SysUtils.CurrentYear[28] 1 year (*)
Emacs Lisp (current-time) 1 μs (*) 1970年1月1日
Excel (Microsoft) date() ? 1900年1月0日[29]
Fortran DATE_AND_TIME
SYSTEM_CLOCK
(*)[30]

[31]

1970年1月1日
CPU_TIME 1 μs
Go time.Now() 1 ns 0001年1月1日
Haskell Time.getClockTime 1 ps (*) 1970年1月1日 (*)
Data.Time.getCurrentTime 1 ps (*) 1858年11月17日(*)
Java (Sun) java.util.Date()
System.currentTimeMillis()
1 ms 1970年1月1日
System.nanoTime()[32] 1 ns 任意的[32]
Clock.systemUTC()[33] 1 ns 任意的[34]
JavaScript new Date()
Date.getTime()
1 ms 1970年1月1日
Matlab now 1 s 0000年1月0日[35]
MUMPS英語MUMPS $H (short for $HOROLOG) 1 s 1840年12月31日
Objective-C [NSDate timeIntervalSinceReferenceDate] < 1 ms[36] 2001年1月1日前後1萬年[36]
OCaml Unix.time() 1 s 1 January 1970
Unix.gettimeofday() 1 μs
Extended Pascal GetTimeStamp() 1 s (*)
Turbo Pascal GetTime()
GetDate()
10 ms (*)
Perl time() 1 s 1970年1月1日
Time::HiRes::time[37] 1 μs
PHP time()
mktime()
1 s 1970年1月1日
microtime() 1 μs
Python time.time() 1 μs (*) 1970年1月1日
RPG CURRENT(DATE), %DATE
CURRENT(TIME), %TIME
1 s 0001年1月1日至9999年12月31日
CURRENT(TIMESTAMP), %TIMESTAMP 1 μs
Ruby Time.now()[38] 1 μs (*) 1970年1月1日(Ruby 1.9.2之前最長至2038年1月19日[39]
Smalltalk Time microsecondClock
(VisualWorks)
1 s (ANSI)
1 μs (VisualWorks)
1 s (Squeak)
1901年1月1日(*)
Time totalSeconds
(Squeak)
SystemClock ticksNowSinceSystemClockEpoch
(Chronos)
SQL CURDATE()
CURTIME()
GETDATE()
NOW()
SYSDATE()
3 ms 1753年1月1日至9999年12月31日(*) [note 3][note 4]
60 s 1900年1月1日至2079年6月6日[note 3]
Standard ML Time.now() 1 μs (*) 1970年1月1日(*)
TCL [clock seconds] 1 s 1970年1月1日
[clock milliseconds] 1 ms
[clock microseconds] 1 μs
[clock clicks] 1 μs (*) (*)
Windows PowerShell Get-Date[40][41] 100 ns[17] 0001年1月1日至9999年12月31日
[DateTime]::Now[15]
[DateTime]::UtcNow[16]
Visual Basic .NET (Microsoft) System.DateTime.Now[15]
System.DateTime.UtcNow[16]
100 ns[17] 0001年1月1日至9999年12月31日

不同時間的轉換 編輯

Windows API提供下述數據結構表示時間:

  • FILETIME:64比特整型值,表示自UTC1601年1月1日開始的每100納秒的計數。
  • SYSTEMTIME:精度到毫秒。
  • time_t:64比特整型值,表示自UTC1970年1月1日開始的秒的計數。
  • struct tm:精度到秒
  • 高分辨率性能計數器(high-resolution performance counter):每秒的滴答數。

Windows API提供下述函數:

  • 本地時間與系統時間之間的轉換:SystemTimeToTzSpecificLocalTime、TzSpecificLocalTimeToSystemTime
  • 系統時間與文件時間的轉換:SystemTimeToFileTime、FileTimeToSystemTime
  • 本地時間與文件時間的轉換:LocalFileTimeToFileTime、FileTimeToLocalFileTime

注釋 編輯

  1. ^ 1.0 1.1 蘋果開發者文檔並沒有清晰地說明CFAbsoluteTime/CFTimeInterval的精度和範圍,只有在CFRunLoopTimerCreate方法中說明「精度最多在毫秒級」。然而,相似的,可以互換的類型NSTimeInterval頁面存檔備份,存於網際網路檔案館) 則列出了精度和範圍。
  2. ^ 2.0 2.1 2.2 2.3 C標準庫並沒有為系統時間值指定特定的分辨率,曆法,範圍,和數據類型。而C++庫則擴展自C庫,所以同樣跟隨C的實現。
  3. ^ 3.0 3.1 MySQL的實現
  4. ^ Oracle的實現為公元前4712年至公元9999年

參考文獻 編輯

  1. ^ Ralf Brown, "Int 0x1A, AH=0x00" in Ralf Brown's Interrupt List, 2000, http://www.delorie.com/djgpp/doc/rbinter/ix/1A/00.html頁面存檔備份,存於網際網路檔案館
  2. ^ Ralf Brown, "Int 0x1A, AH=0x02" in Ralf Brown's Interrupt List, 2000, http://www.delorie.com/djgpp/doc/rbinter/ix/1A/02.html頁面存檔備份,存於網際網路檔案館
  3. ^ Ralf Brown, "Int 0x1A, AH=0x04" in Ralf Brown's Interrupt List, 2000, http://www.delorie.com/djgpp/doc/rbinter/ix/1A/04.html頁面存檔備份,存於網際網路檔案館
  4. ^ CP/M Plus (CP/M Version 3.0) Operating System Guide (PDF). [2016-08-14]. (原始內容存檔 (PDF)於2016-12-27). 
  5. ^ BDOS system calls. [2016-08-14]. (原始內容存檔於2017-08-19). 
  6. ^ Ralf Brown, "Int 0x21, AH=0x2c" in Ralf Brown's Interrupt List, 2000, http://www.delorie.com/djgpp/doc/rbinter/ix/21/2C.html頁面存檔備份,存於網際網路檔案館
  7. ^ Ralf Brown, "Int 0x21, AH=0x2a" in Ralf Brown's Interrupt List, 2000, http://www.delorie.com/djgpp/doc/rbinter/ix/21/2A.html頁面存檔備份,存於網際網路檔案館
  8. ^ "Time Utilities Reference"頁面存檔備份,存於網際網路檔案館) in iOS Developer Library (Apple, 2007).
  9. ^ "Time Utilities Reference"頁面存檔備份,存於網際網路檔案館) in Mac OS X Developer Library (Apple, 2007).
  10. ^ 10.0 10.1 "CFRunLoopTimer Reference"頁面存檔備份,存於網際網路檔案館) in Mac OS X Developer Library (Apple, 2007).
  11. ^ z/Architecture Principles of Operation (Poughkeepsie, New York:International Business Machines, 2007) 7-187.
  12. ^ z/Architecture Principles of Operation, (Poughkeepsie, New York:International Business Machines, 2000) 4-45, 4-46.
  13. ^ IBM intends to extend the date range on future systems beyond 2042. z/Architecture Principles of Operation, (Poughkeepsie, New York:International Business Machines, 2007) 1-15, 4-45 to 4-47.
  14. ^ 實際上Windows操作系統按照固定時間間隔返回系統時間。對於Windows NT 或 Server 2003是15.625 ms
  15. ^ 15.0 15.1 15.2 "DateTime.Now Property"頁面存檔備份,存於網際網路檔案館) in MSDN (Microsoft, 2010) last updated July 2010.
  16. ^ 16.0 16.1 16.2 "DateTime.UtcNow Property"頁面存檔備份,存於網際網路檔案館) in MSDN (Microsoft, 2011)
  17. ^ 17.0 17.1 17.2 "DateTime.Ticks Property頁面存檔備份,存於網際網路檔案館) in MSDN (Microsoft, 2010) last updated May 2010.
  18. ^ COleDateTime採用浮點數表示,整數部分表示日期;小數部分獨立表示時分秒,例如6時整總是表示為0.25,不論整數部分的正負。因此1天間隔表示為1.0。1899年12月30日午夜表示為0.0。
  19. ^ "Date and Time Support"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  20. ^ "System.SysUtils.Time"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  21. ^ "System.SysUtils.GetTime"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  22. ^ "System.SysUtils.Date"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  23. ^ "System.DateUtils.Today"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  24. ^ "System.DateUtils.Tomorrow"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  25. ^ "System.DateUtils.Yesterday"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  26. ^ "System.SysUtils.Now"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  27. ^ "System.SysUtils.DayOfWeek"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  28. ^ "System.SysUtils.CurrentYear"頁面存檔備份,存於網際網路檔案館) in Embarcadero Developer Network (Embarcadero Technologies, 2013)
  29. ^ "In the Microsoft Office Spreadsheet Component, the value 0 evaluates to the date December 30, 1899 and the value 1 evaluates to December 31, 1899. ... In Excel, the value 0 evaluates to January 0, 1900 and the value 1 evaluates to January 1, 1900." XL2000: Early Dates on Office Spreadsheet Component Differ from Excel頁面存檔備份,存於網際網路檔案館) in (Microsoft Support, 2003).
  30. ^ "SYSTEM_CLOCK"頁面存檔備份,存於網際網路檔案館), documentation for FORTRAN compiler, Intel Corp., accessed 27 October 2011.
  31. ^ SYSTEM_CLOCK — Time function"頁面存檔備份,存於網際網路檔案館) in The GNU Fortran Compiler (Free Software Foundation) accessed 27 October 2011.
  32. ^ 32.0 32.1 System.nanoTime() method頁面存檔備份,存於網際網路檔案館) in Java Platform, Standard Edition 6: API Specification (Oracle, 2011) accessed 27 October 2011.
  33. ^ Clock.systemUTC() and other methods頁面存檔備份,存於網際網路檔案館) in Java Platform, Standard Edition 8: API Specification (Oracle, 2014) accessed 15 January 2015.
  34. ^ JSR-310 Java Time System頁面存檔備份,存於網際網路檔案館) in Java Platform, Standard Edition 8: API Specification (Oracle, 2014) accessed 15 January 2015.
  35. ^ [1]頁面存檔備份,存於網際網路檔案館) Matlab Help
  36. ^ 36.0 36.1 "Foundation Data Types Reference"頁面存檔備份,存於網際網路檔案館) in Mac OS X Developer Library (Apple, 2011) last modified 6 July 2011, section NSTimeInterval.
  37. ^ Douglas Wegscheild, R. Schertler, and Jarkko Hietaniemi, "Time::HiRes"頁面存檔備份,存於網際網路檔案館) (CPAN Comprehensive Perl Archive Network, 2011) accessed 27 October 2011.
  38. ^ Time class頁面存檔備份,存於網際網路檔案館) in Ruby-Doc.org: Help and documentation for the Ruby programming language (Scottsdale, AZ: James Britt and Neurogami) accessed 27 October 2011.
  39. ^ Ruby 1.9.2 Release Notes頁面存檔備份,存於網際網路檔案館) in Ruby-Doc.org: Help and documentation for the Ruby programming language (Scottsdale, AZ: James Britt and Neurogami) accessed 27 October 2011.
  40. ^ Using the Get-Date Cmdlet. Microsoft TechNet. [11 December 2013]. (原始內容存檔於2017-08-01). 
  41. ^ Windows PowerShell Tip of the Week – Formatting Dates and Times. Microsoft TechNet. [11 December 2013]. (原始內容存檔於2017-07-31). 

外部連結 編輯