2038年問題
2038年問題(又叫 Unix 千年蟲、Y2K38、Y2K+38、Y2038K)係指 Unix 嘅計時方法嘅電子架生同電腦軟硬件喺2038年會發生日子時間計錯嘅問題。
Unix時間計時嘅方法係由一個 「紀元」(epoch)開始逐秒計,爾種計時方法後來寫咗入 POSIX 標準,所以唔淨止 Unix 同類Unix系統,其他嘢都可能用爾種方法計時,爾種計時法嘅好處係轉夏令時間、轉時區都唔使人手校鐘,但係可能搞到一啲軟件喺2038年出錯。好簡單咁講,因為 Unix 有正負整數(signed integer)卅二爻時間限制,即係由1970年1月1號0時0分0秒 [1],再過2³¹咁多秒,去到2038年初,日子會跳「返轉頭」,搞到啲軟件唔知係幾時,啲嘢就錯晒。
POSIX 嘅計時方法係用秒嚟計時間,每秒用一爻(bit)嚟代表。用嚟代表時間嘅資料類型叫 time_t,定義係一個正負整數(signed integer),傳統上有 32 爻咁大,而 time_t = 0⸺即係上面講嘅 「紀元」⸺就規定咗係世界協調時間 1970年1月1號 0時0分0秒。所以,當 time_t = 10001,時間就係 1970年1月1號 1時0分1秒。如似類推,響 2 嘅 31 次方(即係 2147483648)咁多秒之後,所有可以代表正數嘅整數都用晒,2038年1月19號 3點14分07秒就係最後可以代表得到嘅時間。
2147483648 咁多秒之後,個系統就會返轉頭(wrap around),變成 32 爻可以表示最細嘅負數,跳返1901年。令啲程序一要計時間嘅嘢就錯晒,因為佢哋無法將呢個時間識別為2038年。可能產生錯誤嘅計算同錯誤嘅動作。
有一啲系統嘅 time_t 去到 64 爻咁大,呢啲系統如果唔需要處理 32爻嘅 time_t 資料唔會受到影響。