系統時間

<image>

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

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

## 獲取系統時間

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

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

### 作業系統

作業系統｜命令或函數｜解析度｜時間起點或範圍

Android｜java.lang.System.currentTimeMillis｜1 ms｜起始於1970年1月1日

BIOS (IBM PC)｜INT 1Ah, AH=00h｜54.931 ms 18.204 Hz｜當天午夜

INT 1Ah, AH=02h｜1 s｜當天午夜

INT 1Ah, AH=04h｜1 day｜1980年1月1日至1999年12月31日 或至2079年12月31日（視系統而定）

CP/M Plus｜System Control Block: 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): word, Days since 1 January 1978 byte, Hour (BCD) byte, Minute (BCD) byte, Second (BCD)

DOS (Microsoft)｜C:\>DATEC:\>TIME｜10 ms｜1980年1月1日至2099年12月31日

INT 21h, AH=2Ch SYSTEM TIMEINT 21h, AH=2Ah SYSTEM DATE

iOS (Apple)｜CFAbsoluteTimeGetCurrent｜< 1 ms｜2001年1月1日前後一萬年

Mac OS (Apple)｜CFAbsoluteTimeGetCurrent｜< 1 ms｜2001年1月1日前後一萬年

OpenVMS (HP)｜SYS$GETTIM｜100 ns｜1858年11月17日至公元31086年

z/OS (IBM)｜STCK｜2−12 μs 244.14 ps｜1900年1月1日至世界時2042年9月17日

Unix, POSIX (參見C date and time functions)｜datetime｜1 s｜(、) 1970年1月1日至2038年1月19日1970年1月1日至公元292277026596年

1 μs

1 ns

Windows (Microsoft)｜GetSystemTime｜1 ms｜1601年1月1日至公元30828年

GetSystemTimeAsFileTime｜100 ns

### 程序設計語言與軟體

作業系統｜命令或函數｜解析度｜時間起點或範圍

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｜DAY, TIM｜0.1 s｜(、)

C (參見C date and time functions)｜time｜1 s (、)｜(、)

C++｜std::time std::chrono::system_clock::now｜1 s (、)1 ns (C++11, OS dependent)｜(、)

C# (Microsoft)｜System.DateTime.Now System.DateTime.UtcNow｜100 ns｜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｜毫秒級｜100年1月1日-9999年12月31日

Common Lisp｜(get-universal-time)｜1 s｜1900年1月1日

Delphi (Borland)｜datetime｜1 ms (floating point)｜1900年1月1日

Delphi (Embarcadero Technologies)｜System.SysUtils.Time｜1 ms｜0/0/0000 0:0:0:000至12/31/9999 23:59:59:999 sic

System.SysUtils.GetTime(alias for System.SysUtils.Time)

System.SysUtils.Date｜0/0/0000 0:0:0:000至12/31/9999 0:0:0:000 sic

System.DateUtils.Today System.DateUtils.Tomorrow System.DateUtils.Yesterday

System.SysUtils.Now｜1 s｜0/0/0000 0:0:0:000至12/31/9999 23:59:59:000 sic

System.SysUtils.DayOfWeek｜1 day｜1至7

System.SysUtils.CurrentYear｜1 year｜(、)

Emacs Lisp｜(current-time)｜1 μs (、)｜1970年1月1日

Excel (Microsoft)｜date｜?｜1900年1月0日

Fortran｜DATE_AND_TIME SYSTEM_CLOCK｜(、) ｜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.DateSystem.currentTimeMillis｜1 ms｜1970年1月1日

System.nanoTime｜1 ns｜任意的

Clock.systemUTC｜1 ns｜任意的

JavaScript｜new Date Date.getTime｜1 ms｜1970年1月1日

Matlab｜now｜1 s｜0000年1月0日

MUMPS｜$H (short for $HOROLOG)｜1 s｜1840年12月31日

Objective-C｜NSDate timeIntervalSinceReferenceDate｜< 1 ms｜2001年1月1日前後1萬年

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｜1 μs

PHP｜timemktime｜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｜1 μs (、)｜1970年1月1日（Ruby 1.9.2之前最長至2038年1月19日）

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日(、)

60 s｜1900年1月1日至2079年6月6日

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｜100 ns｜0001年1月1日至9999年12月31日

DateTime::Now DateTime::UtcNow

Visual Basic .NET (Microsoft)｜System.DateTime.Now System.DateTime.UtcNow｜100 ns｜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

## 外部連結

- Critical and Significant Dates , J. R. Stockton (retrieved 3 December 2015)
- The Boost Date/Time Library (C++)
- The Boost Chrono Library (C++)
- The Chronos Date/Time Library (Smalltalk)
- Joda Time , The Joda Date/Time Library (Java)
- The Perl DateTime Project (Perl)
- The Ruby Date/Time Library (Ruby)