1. 程式人生 > >關於2038年1月19日03:14:07 Tuesday

關於2038年1月19日03:14:07 Tuesday

今天在閱讀《UNIX環境高階程式設計》一書時,讀到了一道題目:

若日曆時間存放在帶符號的32位整型數中,那麼到哪一年它將溢位?可以用什麼方法擴充套件溢位浮點數?採用的策略是否與現有的應用相相容?

在計算機應用上,2038年問題可能會導致某些軟體在2038年無法正常工作。所有使用UNIX時間表示時間的程式都將受其影響,因為它們以自1970年1月1日經過的秒數(忽略閏秒)來表示時間。這種時間表示法在類Unix(Unix-like)作業系統上是一個標準,並會影響以其C程式語言開發給其他大部份作業系統使用的軟體。

由於是帶符號的整型數,那麼有效位數就為31位。也就是說最大經過時間maxtime = 2的31次方秒。

s_per_year = 365 *24*60*60;

maxtime / s_per_year = 68;

1970+68=2038.

準確地說,時間會再2038年1月19日03:14:07下一秒溢位,在內部被表示為一個負數.

解決的方法就是將32位擴充套件至64位.