2038年問題
此條目可參照英語維基百科相應條目來擴充。 (2020年7月29日) |
2038年問題 |
大部份的32位操作系統——2038年1月19日 |
距今還有4823天 |
以當地時間計算 |
如果發現倒數時間不準確,請清除頁面快取 |
在計算機應用上,2038年問題可能會導致某些軟件在2038年1月19日3時14分07秒之後無法正常工作。所有使用POSIX時間表示時間的程序都將受其影響,因為它們以自1970年1月1日經過的秒數(忽略閏秒)來表示時間[1]。這種時間表示法在類Unix(Unix-like)操作系統上是一個標準,並會影響以其C編程語言開發給其他大部份操作系統使用的軟件。在大部份的32位操作系統上,此「time_t」數據模式使用一個有正負號的32位元整數(signed int32)存儲計算的秒數。依照此「time_t」標準,在此格式能被表示的最後時間是2038年1月19日03:14:07,星期二(UTC)。超過此一瞬間,時間將會「繞回」(wrap around)且在內部被表示為一個負數,並造成程序無法工作,因為它們無法將此時間識別為2038年,而可能會依個別實作而跳回1970年或1901年。因此可能產生錯誤的計算及動作。
有少數的情況下,在制定規格時,特別規定以無正負號的32位元整數(unsigned int32)儲存POSIX時間,因此錯誤會被延後到2106年。例如比特幣區塊鏈中的區塊時間戳記,就是以這種方法儲存。[2][3]
目前並沒有針對現有的CPU/操作系統搭配的簡單解決方案。直接將POSIX時間更改為64位模式將會破壞對於軟件、數據存儲以及所有與二進制表示時間相關的部份的二進位兼容性。更改成無符號的32位整數則會影響許多與兩時間之差相關的程序。不過,那時使用32位系統的計算機可能會很少。
大部份64位操作系統已經把time_t這個系統變數改為64位寬。不過,其他現有架構的改動仍在進行中,不過預期「應該可以在2038年前完成」。然而,直到2006年,仍然有數以億計的32位系統在運行中,特別是許多嵌入式系統。相對於一般電腦科技18至24個月的革命性更新,嵌入式系統可能直至使用壽命終結都不會改變。32位time_t的使用亦被編碼於文件格式,例如眾所周知的ZIP文件壓縮格式。其能存在的時間遠比受影響的機器長。
新的64位運算器可以記錄至約2900億年後的292,277,026,596年12月4日15:30:08,星期日(UTC)。
參考文獻
- ^ The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition (definition of epoch). IEEE and The Open Group. The Open Group. 2004 [2008-03-07]. (原始內容存檔於2008-12-19).
- ^ Bitcoin Developer Reference - Bitcoin: Block Headers. bitcoin.org. [2018-03-05]. (原始內容存檔於2020-12-08).
- ^ Theymos. Block timestamp- Bitcoin Wiki. [2016-06-01]. (原始內容存檔於2020-11-16).
參見
外部連結
- Entry in How Stuff Works (頁面存檔備份,存於網際網路檔案館)
- The Project 2038 Frequently Asked Questions (頁面存檔備份,存於網際網路檔案館)
- Critical and Significant Dates 2038 (頁面存檔備份,存於網際網路檔案館)
- A 2038-safe replacement for time.h on 32 bit systems (頁面存檔備份,存於網際網路檔案館)
- The number glitch that can lead to catastrophe (頁面存檔備份,存於網際網路檔案館)
- Clewett, James. 2,147,483,647 – The End of Time [Unix]. Numberphile. Brady Haran. [2019-04-06]. (原始內容存檔於2017-05-22).