2000年問題

數字和非數字文檔和數據存儲情況的問題

2000年問題(英語:Year 2000 Problem,簡稱:Y2K),中國大陸香港常稱千年蟲問題[1][2][3]台灣則稱千禧蟲危機[4],是一個電腦程式在日期表達上的設計缺陷,該缺陷會導致電腦錯誤辨識2000年及之後的年份,從而導致其日期辨識紊亂,使得電腦執行任何與時間相關的任務時都會出錯,進而影響整個系統的執行。該問題主要涉及到許多老舊的電腦,為了節省儲存空間,它們的程式普遍採用6位數字來儲存時間,只取四位年份數字中的後兩位數字用於表示年份。這種做法使得電腦無法辨識和更變前兩位年份,從而導致了年份的誤讀[5][6][7][8][9]。很多這些老舊的電腦直到臨近2000年時都還工作在政府部門、軍隊、基礎設施與許多重要行業當中。一旦工作在這些領域的電腦出現問題,將可能導致從停水、斷電,銀行癱瘓到核電廠事故和軍械失控等一系列災難性的後果[10][11][12][13][14]

圖中就是2000年問題所造成後果的一個實例,這個懸掛於南特中央理工學院的電子標誌將2000年1月3日錯誤顯示為了1900年1月3日。

20世紀90年代開始,2000問題逐漸透過媒體的傳播引起了人們的關注,同時也引發了大眾恐慌。針對該問題進行的全球性大規模修復行動也隨之開始,全世界為修復2000年問題前後累計投入了3080億美元[15],而在持續數年的修復之後,該問題最終得到了有效解決,沒有在新千年到來之際大規模爆發[16][17][18]

程式問題

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

當時的程式語言,如COBOLRPG英語IBM RPG,使用ASCIIEBCDIC編碼表示數據。如果用四位數字表示年份,就要多佔用儲存媒介空間,使成本增加;因此為了節省儲存空間,電腦系統的編程人員採用兩位數字表示年份。隨着電腦技術的迅猛發展,儲存媒介的價格逐步下降,但在電腦系統中使用兩位數字來表示年份的做法卻由於慣性思維而被沿襲下來;對大多數程式設計師來說,他們並不認為其所編寫的軟件會持續使用很多年。

但是正是這種思維導致了千年蟲問題。

具體來講,兩千年問題要解決的事項包括以下幾個要點:

  • 軟件在特定的日期會否出現運作錯誤。要留意的日期包括以下幾個日子:
    • 1999年1月1日
    • 1999年4月9日(1999年的第99日)
    • 1999年9月9日
    • 1999年12月31日
    • 2000年1月1日
    • 2000年2月28日
    • 2000年2月29日
    • 2025年1月1日(參見昭和100年問題日語昭和100年問題
    • 2038年1月19日(參見2038年問題
    • 2099年1月1日
    • 2099年4月9日
    • 2099年9月9日
    • 2099年12月31日
    • 2111年11月11日
  • 軟件會不會利用特定的日期格式來表示檔案完結,或檔案已刪除。
  • 軟件會否出現錯誤的日期,如「19100年」或「3000年」。

兩千年問題是由鮑伯·貝默英語Bob Bemer在1958年第一次提出的。在其後的二十年裏,他用了很大的努力,希望政府、企業和國際組織(如IBMISO)來關注這個問題,但反響寥寥。直到2000年將要到來的時候,人們才感覺到兩千年問題的緊迫性。於是社會和政府都投入了大量的人力和物力來避免發生大規模的電腦災難。而從現在來看,這些努力也取得了相應的成果。

問題的引申

有些程式可能會免在2000年出現閏日而強行修改計算日期的過程。這些程式如果繼續在將來的閏年使用的話,有可能會導致日期錯亂。

另一方面,對於使用其它曆法的地區,如台灣民國紀年日本和曆,類似問題也有可能在之後的年份出現。例如:民國100年就在2011年。如果所用的軟件沒有解決兩位年份的問題,那其實只是將兩千年問題從2000年推遲11年後再發生。

對於目前在世界上廣泛用作伺服器軟件的Unix系統來講,由於傳統的Unix系統使用32位元的整型數表示日期(這個32位元數字表示從1970年1月1日起至所儲存日期過去了多少秒),因此在2038年日期將會被捲回,這類似於2000年問題。時間將可能重新從1970年1月1日開始計算,這將可能引起世界範圍的電腦故障。這被稱為2038年問題

此外仍然有一個問題:是否存在10000年問題。當然這是一個遙不可及的問題。

問題的延續

有些程式可能會免在2000年出現閏日而強行修改計算日期的過程。這些程式如果繼續在將來的閏年使用的話,有可能會導致日期錯亂。

另一方面,對於使用其它曆法的地區,如台灣民國紀年日本和曆,類似問題也有可能在之後的年份出現。例如:民國100年就在2011年。如果所用的軟件沒有解決兩位年份的問題,那其實只是將兩千年問題從2000年推遲11年後再發生。

對於目前在世界上廣泛用作伺服器軟件的Unix系統來講,由於傳統的Unix系統使用32位元的整型數表示日期(這個32位元數字表示從1970年1月1日起至所儲存日期過去了多少秒),因此在2038年日期將會被捲回,這類似於2000年問題。時間將可能重新從1970年1月1日開始計算,這將可能引起世界範圍的電腦故障。這被稱為2038年問題

此外仍然有一個問題:是否存在10000年問題。當然這是一個遙不可及的問題。

問題的延續

 
展示JavaScript「.getYear()」函數問題的網頁截圖(詳細介紹請點擊圖片)

有觀點認爲過了公元2000年之後,「千年蟲」的問題就會自動消失。然而,若然沒有對編程方式作合適的修訂,問題在過了公元2000年依然會出現。以下為兩個在公元2008年曾經出現的千年蟲問題:

  • 2008年是閏年,所以這一年有2月29日。不過,有相當數量的摩托羅拉舊款手提電話在這一天由於系統無法表示這一日,系統將電話的日期強制重設為2001年1月1日。
  • 在現代瀏覽器網頁設計中,如需將年份簡寫爲兩位數字,通常直接取年份的最後兩位(如將2021年簡寫爲「21」)。但如使用已廢用的JavaScript「.getYear()」函數,利用「把4位元年份數字減去1900」的方式來取得兩位年份數字,則會出現「不正常」的結果,例如將2021年顯示為「121」。

日本平成時代的結束與新千年蟲

1999年年底,在全世界程式設計師在為千年蟲問題焦慮的的時候,日本程式設計師卻靈機一動:如果繼續沿用昭和(1926年開始)年號的話,千年蟲會足足延後25年(延至2025年)。如此之長的時間足夠解決這次的問題了。然而日本在2019年改元為令和時,不但要更改年號,而且昭和時代年號計算的「新千年蟲」(昭和100年)馬上就要來臨(昭和100年問題日語昭和100年問題)。因此有程式開發人員在Twitter上抱怨難以維護這些老舊電腦代碼問題。[19][20]

千年蟲騙案

在2000年之前,香港有不少騙徒宣稱有千年蟲蛀蟲藥,誘騙對千年蟲問題一知半解的民眾購買(有部分不熟悉電腦的市民以為千年蟲是一種類似瘟疫傳染病病毒),是當時典型的街頭騙案,電視節目《警訊》亦不時提醒市民慎防騙局。[21][22]

參看

參考文獻

  1. ^ 香港金融管理局. 香港金融管理局 - 扑灭「千年虫」. 香港金融管理局. [2023-02-20]. (原始內容存檔於2023-03-06) (中文(中國大陸)). 
  2. ^ 梁光漢. 認識「公元2000問題」刻不容緩. 香港電台. 1998-06-15 [2024-11-25]. (原始內容存檔於2022-07-02) (中文(香港)). 
  3. ^ 姜岩. “千年虫”问题引出的思考_光明日报_光明网. 光明日報. 2000-01-03 [2024-11-25] (中文(中國大陸)). 
  4. ^ 開箱老照片》20世紀最後一天 各界嚴陣以待千禧蟲危機. 中央通訊社. 2023-12-31 [2024-11-25] (中文(臺灣)). 
  5. ^ Feder, Barnaby J. For Computers, the Year 2000 May Prove a Bit Traumatic. The New York Times. 1988-05-07 [2023-03-12]. (原始內容存檔於2023-03-12) (美國英語). 
  6. ^ Peter de, Jager. Doomsday 2000. Computerworld (IDG Enterprise). 1993-09-06, 27 (36): 105-108. ISSN 0010-4841. 
  7. ^ Ullman, Ellen. The Myth of Order. Wired. 1998-04-01. ISSN 1059-1028 (美國英語). 
  8. ^ Bristoll, Scott. The Year 2000 and Computers:What's All the Fuss About?. Cincinnati Enquirer. 1999-01-16. (原始內容存檔於1999-01-17) (英語). 
  9. ^ Li, Feng; Williams, Howard; Bogle, Martin. The ‘Millennium Bug’: its origin, potential impact and possible solutions. International Journal of Information Management. 1999-02-01, 19 (1). ISSN 0268-4012. doi:10.1016/S0268-4012(98)00043-7. 
  10. ^ Anson, Robert Sam. 12.31.99 The Y2K Nightmare. Vanity Fair. 1999-01 [2024-11-25] (美國英語). 
  11. ^ Ch, Rajiv; rasekaran. Big Glitch at Nuclear Plant Shows Perils of Y2K Tests. Washington Post. 1999-03-07 [2023-03-19]. ISSN 0190-8286. (原始內容存檔於2023-03-14) (美國英語). 
  12. ^ U.S. and Russia Agree on Joint Defense Against Y2K Debacles. archive.nytimes.com. [2023-03-12]. (原始內容存檔於2023-03-12). 
  13. ^ Kraig, Michael. Safe or sorry: The "Y2K problem" and nuclear weapons. Bulletin of the Atomic Scientists. 1999-03-01, 55 (2). ISSN 0096-3402. doi:10.2968/055002009. 
  14. ^ Levy, Steven. The Day The World Shuts Down. Newsweek. 1997-06-01 [2024-11-15] (英語). 
  15. ^ Y2K: The good, the bad and the crazy. Computerworld. 2009-12-28 [2024-11-25]. (原始內容存檔於2010-01-01) (英語). 
  16. ^ Y2K bug fails to bite. BBC. 2000-01-01 [2024-11-16]. (原始內容存檔於2023-03-12) (英語). 
  17. ^ Lohr, Steve. '00 Computer Glitches Are Mostly a No-Show. The New York Times. 2000-01-01 [2023-03-12]. (原始內容存檔於2023-03-12) (英語). 
  18. ^ Y2K bug declared New Year's Day loser, but could make comeback Monday. CNN. 2000-01-01 [2023-03-12]. (原始內容存檔於2023-03-12) (英語). 
  19. ^ 明明才2019年,日本却又要面对千年虫问题?岛国程序员崩溃_网易订阅. dy.163.com. [2019-07-28]. (原始內容存檔於2019-07-28). 
  20. ^ 为什么改元“令和”,竟然成了日本程序员的魔咒?. tech.ifeng.com. [2019-07-28]. (原始內容存檔於2019-07-28). 
  21. ^ 福州晚報. web.archive.org. 2016-03-05 [2019-07-28]. 原始內容存檔於2016-03-05. 
  22. ^ 留心今年骗徒十大骗术. web.archive.org. 2016-03-05 [2019-07-28]. 原始內容存檔於2016-03-05. 

外部連結