知識社群登入
位置: AutoCAD開放式教學 > 討論區 > 討論
time() 函數造成的 時間炸彈
1樓
類似 Y2K 危機,即將在 2038年引爆,
詳細的情形,請參考 


UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒,Epoch则是指定为1970年一月一日凌晨零点零分零秒,格林威治时间。  
目前大部份的UNIX系统都是用32位元来记录时间,正值表示为1970以後,负值则表示1970年以前。我们可以很简单地计算出其时间领域: 

2^31/86400(s) = 24855.13481(天) ~ 68.0958(年) 

1970+68.0958 = 2038.0958  
1970-68.0958 = 1901.9042 

时间领域为[1901.9042,2038.0958]。 

准确的时间为2038年一月十八日星期一晚上十点十四分七秒。那一刻,时间将会转为负数,变成1901年十二月十三日黑色星期五下午三点四十五分五十二秒,然後Jason就会跑出来用斧头砸掉您的电脑。 

这就是所谓的UNIX 2038 BUG,或者您也可戏称为Jason hatchet bug。在大部份的UNIX上,并没有所谓Y2K问题,不过都有2038年问题。 

在一些64位元的平台上,例如Digital Alpha、SGI、Sparc等等,则用64位元来表示时间。 

2^63/86400 ~ 1E14(天) ~ 2.92E11(年) 

大约是292亿年。