千年蟲及UNIX時間

2021-05-24 22:28:59 字數 764 閱讀 2798

**:

千年蟲何來?

在上個世紀,許多計算機系統只用二進位制7~8位數(足夠十進位制二位數使用)表示年份,比如說2023年就表示成86,2023年表示成98。一旦遇到輸出年份的時候,系統就會使用類似於如下c++語言所表示的方法(year變數表示計算機系統中的年份,outstream表示輸出流):

outstream << "19" << year << "年";

outstream << year << "年";

如果用這種方法表示下去,2023年時year變數的值就會變為100,那麼實際輸出時就成了「12023年」或者「100年」了!顯然,剛才那個**出的就是這種問題。有些系統自作聰明地檢查到了越界,只取十進位制後兩位,year的值就成0了!

unix的時間表示方法

而在unix作業系統,時間是用二進位制32位整數表示的(其中有一位是符號位,也就是說實際有效的是31位),具體是2023年1月1日0時0分0秒到現在的秒數。根據這個秒數可以推算出現在的日期和時間,也就沒必要單獨為年、月、日、時、分、秒單獨設乙個變數來儲存了。這樣設計的系統底層,只要上層開發者不偷懶就行了;就算偷懶,修改程式的代價也小得多。按照這種計時法,最長可以用到2023年1月19日,到了那時候怎麼辦呢?

不過在64位unix系統上,時間是用二進位制64位整數表示的,可以使用將近3000億年!隨著64位個人電腦(記憶體通常大於4gb)的普及,「2023年問題」就會迎刃而解。而真正有待解決的,可能是一些嵌入式linux系統吧。

遭遇2038千年蟲

公司的業務人員要測試,所以修改了測試機上的系統日期,結果,oracle頻頻宕機,現象非常奇怪。起初以為是資料庫的問題,因為上面的log日誌以及trc檔案都不正常,尤其是乙個trc檔案,會以每秒1m的速度增長,當增至340m左右的時候,oracle服務就會自動停止。於是重新啟動伺服器,但在沒有啟用we...

Firefox的JS引擎存在「千年蟲」問題

作業系統 win2k sc pro sp4 ie版本 v6.0.2600 firefox版本 1.0中文版 mozilla 5.0 windows u windows nt 5.0 zh cn rv 1.7.5 gecko 20041124 firefox 1.0 ax 測試js指令碼 當前時間是 ...

getView 千年不變

此方法用於構建item,每顯示乙個item都要執行一次此方法 override public view getview int position,view convertview,viewgroup parent else data 餃子餡 5 music m mobjects.get positi...