華文網

1999年的千禧蟲到底是什麼?

電腦問題,中國大陸及香港常稱為千年蟲問題,臺灣則稱千禧蟲危機,是指由於電腦程式設計的一些問題,使得電腦在處理2000年1月1日以後的日期和時間時,一般來說,由於電腦程式中使用兩個數字來表示年份,

如1998年被表示為“98”、1999年被表示為“99”;而2000年被表示為“00”,這樣將會導致某些程式在計算時得到不正確的結果,如把“00”誤解為1900年。在嵌入式系統中可能存在同樣的問題,這有可能導致設備停止運轉或者發生更加災難性的後果。

影響主要為一些敏感的工業部門(比如電力,

能源)和銀行,比如銀行存款瞬間變為0,抑或某些重要資料可能在瞬間全部消失;

問題歸因:

兩千年問題始於1960年代,當時電腦記憶體和外部存儲介質的成本很高,大多數資料處理需要借助穿孔卡片。為了節省硬體成本,葛麗絲·霍普在Harvard Mark I上以6位元數位來存儲時間,即年、月、日各兩位。這個習慣被COBOL繼承下來,傳播到整個電腦程式界。

當時的程式設計語言,如COBOL和RPG,使用ASCII和EBCDIC編碼表示資料。如果用四位元數字表示年份,就要多佔用儲存器空間,使成本增加;因此為了節省存儲空間,電腦系統的程式設計人員採用兩位元數位表示年份。隨著電腦技術的迅猛發展,雖然後來記憶體的價格降低了,

但在電腦系統中使用兩位元數位來表示年份的做法卻由於思維上的慣性勢力而被沿襲下來;對大多數程式師來講,他們並不認為所編寫的軟體會持續使用很多年。

下一次出現時間:

2038年問題可能會導致某些軟體在2038年1月19日3時14分07秒之後無法正常工作。所有使用POSIX時間表示時間的程式都將受其影響,因為它們以自1970年1月1日經過的秒數(忽略閏秒)來表示時間。這種時間標記法在類Unix(Unix-like)作業系統上是一個標準,

並會影響以其C程式設計語言開發給其他大部分作業系統使用的軟體。在大部分的32位元作業系統上,此“time_t”資料模式使用一個有正負號的32位元整數(signed int32)存儲計算的秒數。依照此“time_t”標準,在此格式能被表示的最後時間是2038年1月19日03:14:07,星期二(UTC)。超過此一瞬間,時間將會“繞回”(wrap around)且在內部被表示為一個負數,並造成程式無法工作,因為它們無法將此時間識別為2038年,
而可能會依個別實現而跳回1970年或1901年。錯誤的計算及動作可能因此產生。