本頁使用了標題或全文手工轉換

UNIX時間

維基百科,自由的百科全書
跳至導覽 跳至搜尋
當前Unix時間
1669875433
ISO 8601表示法
2022-12-01T06:17:13+00:00
如果時間不符,請點擊右下方的更新按鈕。

UNIX時間,或稱POSIX時間UNIX類UNIX系統使用的時間表示方式:從UTC1970年1月1日0時0分0秒起至現在的總秒數,不考慮閏秒[1]。 在多數Unix系統上Unix時間可以透過date +%s指令來檢查。

歷史[編輯]

最早版本的Unix時間是32位元整型,以60 Hz增加。1971年11月3日發行的第一版《Unix Programmer's Manual》定義了Unix時間為「the time since 00:00:00, 1 January 1971, measured in sixtieths of a second」,即從1971年1月1日00:00:00開始,以60赫茲增加。[2]這意味著以32位元無符號整型儲存Unix時間,829天(約2.5年)後就將用盡重設。由於該限制,Unix時間原點被重定義多次。Unix V3規定採用60hz的滴答數,從1972年元旦開始計時。直至1973年的Unix V4開始採用1970年1月1日00:00:00UTC為時間原點,以1赫茲計時。由於Unix和C語言採用32位元有符號整型表示時間,這可容納約136年的時間跨度,在1970年之前和之後各占一半。即到2038年1月19日和1901月12月13日用盡重設。

此後,這個Unix 時間定義考慮到時區,閏秒等問題被修訂。

問題[編輯]

2038年問題[編輯]

2038年1月19日3時14分07秒,32位元系統的UNIX時間將會被重設。

現時大部分使用UNIX的系統都是32位元的,即它們會以32位元有符號整數表示時間類型time_t。因此它可以表示136年的秒數。表示協調世界時間1901年12月13日星期五20時45分52秒至2038年1月19日3時14分07秒(二進制:01111111 11111111 11111111 11111111,0x7FFF:FFFF),在下一秒二進制數字會是10000000 00000000 00000000 00000000(0x8000:0000),這是負數,因此各系統會把時間誤解作1901年12月13日20時45分52秒(亦有可能回歸到1970年)。這時可能會令軟體發生問題,導致系統癱瘓。

目前的解決方案是把系統由32位元轉為64位元系統。在64位元系統下,此時間最多可以表示到2922億7702萬6596年12月4日15時30分08秒。

早於1970年的日期時間的表示[編輯]

Unix時間在某些實現中允許為負值。如Visual C++ 2019time_t資料類型定義為long long;但某些實現不允許負值,如Python 3.10的datetime.datetime包,datetime.datetime.fromtimestamp(-1)或者datetime.datime(1969,1,1,0,0,0).timestamp()都會丟擲異常。又如MySQL 7.X的 SELECT FROM_UNIXTIME(-1);返回NULL,也不支援負值。

Unix負時間導致部分iPhone手機無法啟動[編輯]

在2016年2月12日,據披露,如果把蘋果iPhoneiPad等裝置的系統時間設定為1970年1月1日,隨後重新啟動裝置,它會無法正常啟動。目前蘋果公司正式承認了漏洞存在,但是尚未公布具體的引發原因。[3]部分中國大陸使用者猜想這是因為調整當地時間到1970.1.1 0:00後,如果時區為正,那麼GMT時間就早於UNIX定義的0時間。例如北京時間 1970.1.1 0:00 (UTC+0800) 是UTC 1969.12.31 16:00 對應的UNIX時間是負的。但是有人回應嘗試設為正時區重啟後仍然無法正常啟動。[4]蘋果對此採用的策略是在隨後的韌體更新中將時間禁止調整到2000年以前。

紀念日[編輯]

UNIX時間以5000日為紀念日,第一個5000日是1983年9月10日,第二個5000日(即第1萬日)是1997年5月19日,第三個5000日(即第1萬5000日)是2011年1月26日,第四個5000日(即第2萬日)是2024年10月4日,第五百個5000日(即第250萬日)是8814年10月8日[5]

相關條目[編輯]

參考文獻[編輯]

  1. ^ The Unix leap second mess. [2016-02-14]. (原始內容存檔於2021-05-04). 
  2. ^ Unix Programmer's Manual (PDF) 1st. 1971-11-03 [2012-03-28]. (原始內容 (PDF)存檔於2022-03-05). time returns the time since 00:00:00, 1 Jan. 1971, measured in sixtieths of a second. 
  3. ^ 苹果确认iPhone/iPad时间设置不对会变砖问题. [2016-02-16]. (原始內容存檔於2019-05-02). 
  4. ^ 为什么把部分苹果设备的系统时间调整为1970.1.1,重启后就会变砖?. [2016-02-16]. (原始內容存檔於2021-10-08). 
  5. ^ About Unix epoch time. [2011-01-27]. (原始內容存檔於2011-01-29). 

外部連結[編輯]