很湊巧的發現一個關於2038的問題,原因是垃圾信老是都是2038年的,無聊上Google找找,原來許多垃圾信都用這個32 bit Unix系統時間的最大值來逃過一些垃圾郵件過濾規則。
上次才一個千禧蟲,在30幾年後會有一個2038蟲,(民國100年許多國內系統或許也會發生問題- 百禧蟲),屆時諸多32位元的系統將會Crash(台灣時間GMT+8)...
什麼是Y2038 bug
Time_t是C/C++等編程語言在內部代表/存儲日期和時間的一種資料型態。Time_t實際上是一個代表秒數的整數,當它的值為0時,代表的時間是1970年1月1日12:00:00;當Time_t=60時,則表示1970年1月1日12:01:00,依此類推。
所有32位電腦系統都用帶符號32位整型來存儲time_t的值,也就是說t_time只能用31位二進制數來表示(第一位用來表示正負號),而其最大值轉換為十進制是2147483647,換算成日期和時間剛好是2038年1月19日03:14:07am(GMT),而這一秒過後,t_time的值將變成-2147483647,代表的是1901年12月13日8:45:52pm,這樣32位元(bit)系統的日期時間顯示就都亂掉了。另外,無法接受time_t為負值的其他功能也將返回錯誤。