2000 年問題（，簡稱：Y2K），中國大陸及香港常稱 zhhans 千年蟲；zhhant 千年蟲； 問題，中華民國則稱 千禧蟲 危機，是一個計算機程式在日期表達上的設計缺陷，該缺陷會導致計算機錯誤識別 2000 年及之後的年份，從而導致其日期識別紊亂，使得計算機執行任何與時間相關的任務時都會出錯，進而影響整個系統的執行。該問題主要涉及到許多老舊的計算機，為了節省儲存空間，它們的程式普遍採用 6 位數字來儲存時間，只取 4 位年份數字中的後 2 位數字用於表示年份。這種做法使得計算機無法識別和更變前兩位年份，從而導致了年份的誤讀。很多這些老舊的計算機直到臨近 2000 年時都還工作在政府部門、軍隊、基礎設施與許多重要行業當中。一旦工作在這些領域的計算機出現問題，將可能導致從停水、斷電，銀行癱瘓到核電廠事故和軍械失控等一系列災難性的後果。 自 20 世紀 90 年代開始，2000 問題逐漸透過媒體的傳播引起了人們的關注，同時也引發了大眾恐慌。針對該問題進行的全球性大規模修復行動也隨之開始，全世界為修復 2000 年問題前後累計投入了約 3080 億美元，而在持續數年的修復之後，該問題最終得到了有效解決，沒有在新千年到來之際大規模爆發。 問題起因 雖然 2000 年問題的中文別稱 千年蟲 常使人將其誤認為電腦病毒，但實際上它只是一個電腦程式在日期表示方面的缺陷，並非惡意編寫的電腦病毒。該問題起始於 20 世紀 60 年代，那時計算機的儲存器價格極為昂貴，早期的磁芯儲存器價格平均為每位元 1 美元，並且容量很小。且當時的計算機仍舊採用打孔卡來儲存資料，一個最常見的 IBM 打孔卡只有 80 列寬，能儲存的資料也極其有限。因此，程式設計師在編寫程式時需要儘可能的節省儲存空間，以最大程度的降低儲存成本。因此，當時的程式設計師普遍在編寫程式時採用六位數來儲存時間，只取四位數年份中的後兩位來表示年份，例如，1976 年 10 月 23 日就會被簡短的儲存為 231076 或 102376。對當時的情況來說，六位數日期表示法有很大的作用，它能夠減小程式的記憶體需求，並減少一個程式所要佔用的打孔卡卡數。事實上，這種做法在更早之前的製表機時代就已經被使用。在要處理大量日期資料時，六位數日期表示法還能發揮更大的作用。例如，一間擁有一千萬客戶，每個客戶每天交易三次的銀行若要在計算機中儲存一週所有客戶的交易時間，只取兩位數年份能為這家銀行省下 60 兆位元組的儲存空間。後來，隨著科技的發展，到了 20 世紀 70 年代，磁芯儲存器的價格逐漸下降到僅為每位元 1 美分。而同時，具有同樣價格，但尺寸更小且更便於使用的 DRAM 也開始逐步替代了磁芯儲存器，打孔卡亦被逐漸淘汰，儲存技術的進步和其價格的大幅降低使得儲存空間不再是一個緊迫的問題。在程式中使用六位數日期的必要性也越來越低，但其並沒有就此退出歷史舞臺，出於程式設計師們的習慣，以及為了保持向上相容，這一日期表示法被一直沿用下來，即使當時已經有人提出過在這一日期表示法下潛藏的問題，但當時的程式設計師普遍都認為自己編寫的程式不可能被持續使用到新千年，並沒有理會這些警告。 六位數日期表示法雖然的確在節省儲存空間上發揮出了作用，但這種模糊的表示法也為未來埋下了隱患。人們在日常生活中為了方便有時也會只用兩位數簡稱一個年份，但計算機和人類的區別在於，人類擁有能夠理解並補全前兩位年份數字的能力，但計算機沒有。它們只會讀取被實際寫出來的後兩位年份，無法自行變更沒被實際寫出來的前兩位年份數字。這就導致了一個問題：在六位數日期下，2000 年 1 月 1 日將會被轉為 010100，然而，由於前兩位年份沒被實際寫出來，也就無法進行變更，計算機就會繼續將前兩位預設為 19，如此一來，就使得計算機會將 2000 年誤認為 1900 年，認為被縮寫為 00 的 2000 年要早於被縮寫為 99 的 1999 年。這會導致計算機在執行任何涉及到日期的任務時出錯，甚至引發崩潰。例如，醫生要使用一臺計算機為一位出生在 2000 年 3 月 16 日的嬰兒計算要為他使用的藥物劑量，若這臺計算機仍舊使用六位數日期表示法，其就會將這位嬰兒誤認為是一位出生在 1900 年 3 月 16 日的百歲老人，並對醫生給出一個適用於老年人的藥物劑量，但這個劑量對新生兒來說可能會是致命的。若不對該問題加以修復，諸如此類的故障會在 2000 年到來時在全球爆發，影響到所有依賴這些有缺陷的計算機運作的基礎設施和軍政機關，導致停電停水、醫療癱瘓、通訊終止到導彈誤射等一系列災難性的後果。 此外，2000 年問題也會在除 2000 年 1 月 1 日以外的日期造成影響，並且也不止會導致計算機誤判 2000 年及之後的年份。因為問題的根源是計算機無法變更前兩位的年份數字，其也會導致計算機錯誤判定 1900 年之前的年份；一些使用數字 99 或 9999 作為文件終止標記或停止程式碼，且仍舊採用兩位數年份表示法的計算機可能會在 1999 年 9 月 9 日出現故障；2000 年問題還可能會使一些計算機無法將 2000 年正確識別為閏年，從而導致它們在 2000 年 2 月 29 日、3 月 1 日、12 月 31 日和 2001 年 1 月 1 日出現故障。 引起關注 1958 年，當時在 IBM 工作的在為耶穌基督後期聖徒教會編寫族譜記錄軟體時意識到了六位數日期寫法的缺陷，他在之後的數十年裡不斷在各處做出對六位數日期寫法缺陷的擔憂，並呼籲人們轉用標準的八位完整日期寫法，但都沒有起到很大的作用。其於 1971 年在霍尼韋爾計算機期刊上發表了一篇題為《Whats the Date？》的文章，建議人們使用標準的規範日期寫法，這被認為是世界上第一篇公開發表的 2000 年問題警告文章，1979 年，他再於雜誌發表另一篇文章《Time and the computer》，進一步深入探討了日期表示問題，他在這篇文章中也提到了 2000 年閏年問題。 問題的引申 有些程式可能會免在 2000 年出現閏日而強行修改計算日期的過程。這些程式如果繼續在將來的閏年使用的話，有可能會導致日期錯亂。 另一方面，對於使用其它曆法的地區，如臺灣的民國紀年或日本的和曆，類似問題也有可能在之後的年份出現。例如：民國 100 年就在 2011 年。如果所用的軟體沒有解決兩位年份的問題，那其實只是將兩千年問題從 2000 年推遲 11 年後再發生。 對於目前在世界上廣泛用作伺服器軟體的 Unix 系統來講，由於傳統的 Unix 系統使用 32 位的整型數表示日期（這個 32 位數字表示從 1970 年 1 月 1 日起至所儲存日期過去了多少秒），因此在 2038 年日期將會被捲回，這類似於 2000 年問題。時間將可能重新從 1970 年 1 月 1 日開始計算，這將可能引起世界範圍的計算機故障。這被稱為 2038 年問題。 此外，是否存在 10000 年問題。還是一個遙不可及的問題。 問題的延續 有觀點認為過了公元 2000 年之後，「千年蟲」的問題就會自動消失。然而，若然沒有對程式設計方式作合適的修訂，問題在過了公元 2000 年依然會出現。以下為兩個在公元 2008 年曾經出現的千年蟲問題： 2008 年是閏年，所以這一年有 2 月 29 日。不過，有相當數量的摩托羅拉舊款手提電話在這一天由於系統無法表示這一日，系統將電話的日期強制重置為 2001 年 1 月 1 日。 在現代瀏覽器和網頁設計中，如需將年份簡寫為兩位數字，通常直接取年份的最後兩位（如將 2021 年簡寫為「21」）。但如使用已廢用的 JavaScriptgetYear 函式，利用「把 4 位年份數字減去 1900」的方式來取得兩位年份數字，則會出現 不正常 的結果，例如將 2021 年顯示為 121。 日本平成時代的結束與新千年蟲 1999 年年底，在全世界程式設計師在為千年蟲問題焦慮的的時候，日本程式設計師卻靈機一動：如果繼續沿用昭和（1926 年開始）年號的話，千年蟲會足足延後 25 年（延至 2025 年）。如此之長的時間足夠解決這次的問題了。然而日本在 2019 年改元為令和時，不但要更改年號，而且昭和時代年號計算的 新千年蟲（昭和 100 年）馬上就要來臨（昭和 100 年問題）。 參見 2038 年問題 10000 年問題 民國百年蟲 千年蟲騙案 參考文獻 外部連結 關於 政府呼籲各界同心協力殲滅千年蟲 的海報 千年蟲與中小企業 鏗鏘集 Problem Category 曆法 CategoryCOBOL Category 世界末日場景 Category 技術危害 Category 程式錯誤 Year 02000 problem Category 第三個千年之交