2000年问题

自20世纪90年代开始，2000问题逐渐透过媒体的传播引起了人们的关注，同时也引发了大众恐慌。针对该问题进行的全球性大规模修复行动也随之开始，全世界为修复2000年问题前后累计投入了约3080亿美元，而在持续数年的修复之后，该问题最终得到了有效解决，没有在新千年到来之际大规模爆发。

 问题起因 

虽然2000年问题的中文别称“千年虫”常使人将其误认为电脑病毒，但实际上它只是一个计算机程序在日期表示方面的缺陷，并非恶意编写的电脑病毒。该问题起始于20世纪50年代到60年代，那时计算机的存储器价格极为昂贵，并且容量很小，早期的磁芯存储器价格平均为每比特1美元，而在同一时期，一块大小仅为1MB的硬盘价格即为761,000美元。且当时的计算机仍旧采用打孔卡来存储和输入数据，一个最常见的IBM打孔卡只有80列宽，能储存的数据也极其有限。因此，程序员在编写程序时需要尽可能的节省存储空间，以最大程度的降低存储成本。因此，当时的程序员普遍在编写程序时采用六位数来存储时间，只取四位数年份中的后两位来表示年份，例如，1976年10月23日就会被简短的存储为23/10/76或10/23/76。对当时的情况来说，六位数日期表示法有很大的作用，它能够减小程序的内存需求，并减少一个程序所要占用的打孔卡卡数。这种做法沿袭自更早之前的时代，当时的操作员就已经在打孔卡上惯用六位日期来节省时间和空间。在要处理大量日期数据时，六位数日期表示法还能发挥更大的作用。例如，一间拥有一千万客户，每个客户每天交易三次的银行若要在计算机中存储一周所有客户的交易时间，只取两位数年份能为这家银行省下60兆字节的存储空间。

后来，随着科技的发展，到了20世纪70年代，磁芯存储器的价格逐渐下降到仅为每比特1美分。而同时，具有同样价格，但尺寸更小且更便于使用的DRAM也开始逐步替代了磁芯存储器，打孔卡亦被逐渐淘汰，存储技术的进步和其价格的大幅降低使得存储空间不再是一个紧迫的问题。在程序中使用六位数日期的必要性也越来越低，但其并没有就此退出历史舞台，尽管存储介质历经数次变迁，但其中的数据结构通常变化不大。出于程序员们的习惯，以及为了保持向上兼容，六位数日期表示法就被一直沿用下来。即使当时已经有人提出过在这一日期表示法下潜藏的问题，但当时的程序员普遍都认为自己编写的程序不可能被持续使用到新千年，并没有理会这些警告。

六位数日期表示法虽然的确在节省存储空间上发挥出了作用，但这种模糊的表示法也为未来埋下了隐患。人们在日常生活中为了方便有时也会只用两位数简称一个年份，但计算机和人类的区别在于，人类拥有能够理解并补全前两位年份数字的能力，但计算机没有。它们只会读取被实际写出来的后两位年份，无法自行变更没被实际写出来的前两位年份数字。这就导致了一个问题：在六位数日期下，2000年1月1日将会被转为01/01/00，然而，由于前两位年份没被实际写出来，也就无法进行变更，计算机就会继续将前两位默认为“19”，如此一来，就使得计算机会将2000年误认为1900年，认为被缩写为“00”的2000年要早于被缩写为“99”的1999年。这会导致计算机在执行任何涉及到日期的任务时出错，甚至引发崩溃。例如，医生要使用一台计算机为一位出生在2000年的婴儿计算要为他使用的药物剂量，若这台计算机仍旧使用六位数日期表示法，其就会将这位婴儿误认为是一位出生在1900年的百岁老人，并对医生给出一个适用于老年人的药物剂量，但这个剂量对新生儿来说可能会是致命的。若不对该问题加以修复，诸如此类的故障会在2000年到来时在全球爆发，影响到所有依赖这些有缺陷的计算机运作的基础设施和军政机关，导致停电停水、医疗瘫痪、通信终止到导弹误射等一系列灾难性的后果。

此外，2000年问题也会在除2000年1月1日以外的日期造成影响，并且也不止会导致计算机误判2000年及之后的年份。因为问题的根源是计算机无法变更前两位的年份数字，其也会导致计算机错误判定1900年之前的年份；而一些使用数字99或9999作为文档终止标记或停止代码，且仍旧采用两位数年份表示法的计算机则可能会在1999年9月9日出现故障；另外，一些计算机由于采用了不正确的闰年识别算法，致使其无法将2000年正确识别为闰年，从而导致它们在2000年2月29日、3月1日、12月31日、2001年1月1日出现故障，该问题也在2000年问题的范畴之内。其它会致使2000年问题的原因还包括将“19”硬编码到软件子程序中、采用可能会致使存储寄存器溢出的日期数据类型。

 修復方式 
对2000年问题最直接，也最彻底的修復方式就是直接将六位日期纠正为完整的八位日期。但这种方式的成本也是最高的，因为要完全纠正所有引用和使用了两位数年份的程序，以及所有引用了日期数据的数据库，确保整套系统内所有程序都被正确转换到了新日期格式，因为未经修改的旧程序可能会直接访问到日期字段的内部结构，从而又再度破坏掉修正后的系统；此外还需要调整所有数据字段的位置引用，以及所有包含日期数据的记录的格式；重新格式化并重写包括过往数据文件在内的所有数据文件，同时还可能需要修改各个系统之间的消息格式。

 引起关注 
1958年，当时在IBM工作的在为耶稣基督后期圣徒教会编写族谱记录软件时意识到了六位数日期写法的缺陷，他在之后的数十年里不断在各处做出对六位数日期写法缺陷的担忧，并呼吁人们转用标准的八位完整日期写法，但都没有起到很大的作用。其于1971年在《霍尼韦尔计算机期刊》上发表了一篇题为《What's the Date？》的文章，建议人们使用标准的规范日期写法，这被认为是世界上第一篇公开发表的2000年问题警告文章，1979年，他再于杂志《》发表另一篇文章《Time and the computer》，进一步深入探讨了日期表示问题，他在这篇文章中也提到了2000年闰年问题，他还为COBOL添加了PICTURE子句，以允许程序员能够在程序中使用四位数年份，此后他一直坚持向业界发出警告，直到他在1982年退休。

1993年，美国杂志《Computerworld》刊登了一篇题为《Doomsday 2000》的文章，这篇文章的作者是加拿大程序员，他在1977年于IBM上任操作员，在职期间，他意识到两位数的年份写法会为未来埋下隐患，并向管理层反馈了这一问题，但同样也没有起到作用。1993年，Computerworld的一名编辑在他进行了一场关于个人电脑的演讲之后找到他，希望他能就这场演讲的主题在Computerworld上发表一篇文章，不过彼得则提议要另写一篇“真正的问题”，于是便以2000年问题为主题，撰写了《Doomsday 2000》，这篇文章普遍被认为是引起计算机行业开始关注2000年问题的文章，彼得·德·耶格也因此被认为是将2000年问题带入行业及大众视野的人，并在此后作为2000问题专家获利。

1995年，IBM承认2000问题的存在，并开始向其客户提供问题的解决服务、工具与支持，而微软公司的联合创始人与时任CEO比尔·盖茨则在1996年7月表示2000年问题只是由“老化的大型机软件”所导致的，并坚称微软的软件不会受到2000年问题的影响，而后其又于1997年的一次行业峰会上表示对2000年问题的担忧要归咎于“喜欢讲恐怖故事”的人，直到一年后，微软才承认他们在2000年问题上“反应迟缓”。

 参见 

 2038年问题
 10000年问题
 民國百年蟲
 千年虫骗案

 注释 

 参考文献 

 外部連結 
 关于“政府呼籲各界同心協力殲滅千年蟲”的海报，香港特區政府政府檔案處
 千年蟲與中小企業
 鏗鏘集

Problem
Category:曆法
Category:COBOL
Category:世界末日场景
Category:技术危害
Category:程式錯誤
Year 02000 problem
Category:第三个千年之交