UNIX時間,或稱POSIX時間是UNIX或類UNIX系統使用的時間表示方式:從UTC1970年1月1日0時0分0秒起至現在的總秒數,不考慮閏秒[1]。 在多數Unix系統上Unix時間可以透過date +%s
指令來檢查。
歷史
1970年, Unix正式誕生,1971年11月3日的第一版《Unix Programmer's Manual》中把Unix時間定義為「自1970年1月1日0時0分0秒以來以1/60秒為單位的時間」。此後,這個定義由於可定義的時間範圍,時區,閏秒等問題被重新定義。
問題
2038年問題
現時大部分使用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秒。
Unix負時間導致部分iPhone手機無法啟動
在2016年2月12日,據披露,如果把蘋果iPhone、iPad等設備的系統時間設置為1970年1月1日,隨後重啟設備,它會無法正常啟動。目前蘋果公司正式承認了漏洞存在,但是尚未公布具體的引發原因。[2]部分中國用戶猜想這是因為調整當地時間到1970.1.1 0:00後,如果時區為正,那麼GMT時間就早於UNIX定義的0時間。例如北京時間 1970.1.1 0:00 (UTC+0800) 是UTC 1969.12.31 16:00 對應的UNIX時間是負的。但是有人回應嘗試設為正時區重啟後仍然無法正常啟動。[3]蘋果對此採用的策略是在隨後的固件更新中將時間禁止調整到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日[4]。
相關條目
參考文獻
- ↑ The Unix leap second mess
- ↑ 苹果确认iPhone/iPad时间设置不对会变砖问题. [2016-02-16].
- ↑ 为什么把部分苹果设备的系统时间调整为1970.1.1,重启后就会变砖?.
- ↑ About Unix epoch time. [2011-01-27].
外部連結
- Unix時間戳在線轉換
- Unix程序員手冊,第一版
- Clewett, James. 2,147,483,647 – The End of Time [Unix].
- chrono-Compatible Low-Level Date Algorithms – algorithms to convert between Gregorian and Julian dates and the number of days since the start of Unix time