2038年问题

在计算机应用上，2038年问题可能会导致某些软件在2038年1月19日3时14分07秒之后无法正常工作。所有使用POSIX时间表示时间的程序都将受其影响，因为它们以自1970年1月1日经过的秒数（忽略闰秒）来表示时间。这种时间表示法在类Unix（）操作系统上是一个标准，并会影响以其C编程语言开发给其他大部份操作系统使用的软件。在大部份的32位操作系统上，此「time_t」数据模式使用一个有正負號的32位元整數（signed int32）存储计算的秒数。依照此「time_t」标准，在此格式能被表示的最后时间是2038年1月19日03:14:07，星期二（UTC）。超过此一瞬间，时间将会“绕回”（）且在内部被表示为一个负数，并造成程序无法工作，因为它们无法将此时间识别为2038年，而可能会依個別實作而跳回1970年或1901年。因此可能产生错误的计算及动作。

有少數的情況下，在制定規格時，特別規定以無正負號的32位元整數（unsigned int32）儲存POSIX时间，因此錯誤會被延後到2106年。例如比特幣區塊鏈中的區塊時間戳記，就是以這種方法儲存。

目前并没有针对现有的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）。

參考文獻

 參見 
2000年问题
10000年问题
民國百年蟲
网络时间协议
UNIX时间
2147483647 - 32位元表示的最大整數（以2的補數法表示）

外部連結
 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 


Category:程式錯誤
Category:2038年
Category:年問題
Category:未来问题