2000年问题
2000年问题(英语:Year 2000 Problem,简称:Y2K[1]),中国大陆及香港常称千年虫问题[2][3],台湾则称千禧蟲危机[4],是一个计算机程序在日期表达上的设计缺陷,该缺陷会导致计算机错误识别2000年及之后的年份,从而导致其日期识别紊乱,使得计算机执行任何与时间相关的任务时都会出错,进而影响整个系统的运行。该问题主要涉及到许多老旧的计算机,为了节省存储空间,它们的程序普遍采用6位数字来存储时间,只取四位年份数字中的后两位数字用于表示年份。这种做法使得计算机无法识别和更变前两位年份,从而导致了年份的误读[5][6][7][8][9]。很多这些老旧的计算机直到临近2000年时都还工作在政府部门、军队、基础设施与许多重要行业当中。一旦工作在这些领域的计算机出现问题,将可能导致从停水、断电,银行瘫痪到核电厂事故和军械失控等一系列灾难性的后果[10][11][12][13][14][15]。
自20世纪90年代开始,2000问题逐渐透过媒体的传播引起了人们的关注,同时也引发了大众恐慌[16][17][18][19]。针对该问题进行的全球性大规模修复行动也随之开始,全世界为修复2000年问题前后累计投入了约3080亿美元[20],而在持续数年的修复之后,该问题最终得到了有效解决,没有在新千年到来之际大规模爆发[21][22][23][24]。
问题起因
[编辑]虽然2000年问题的中文别称“千年虫”常使人将其误认为电脑病毒,但实际上它只是一个电脑程序在日期表示方面的缺陷,并非恶意编写的电脑病毒[2]。该问题起始于20世纪60年代,那时计算机的存储器价格极为昂贵,早期的磁芯存储器价格平均为每比特1美元[26],并且容量很小[9]。且当时的计算机仍旧采用打孔卡来存储数据,一个最常见的IBM打孔卡只有80列宽,能储存的数据也极其有限。因此,程序员在编写程序时需要尽可能的节省存储空间,以最大程度的降低存储成本。因此,当时的程序员普遍在编写程序时采用六位数来存储时间,只取四位数年份中的后两位来表示年份,例如,1976年10月23日就会被简短的存储为23/10/76或10/23/76[27][10]。对当时的情况来说,六位数日期表示法有很大的作用,它能够减小程序的内存需求,并减少一个程序所要占用的打孔卡卡数。事实上,这种做法在更早之前的制表机时代就已经被使用。在要处理大量日期数据时,六位数日期表示法还能发挥更大的作用。例如,一间拥有一千万客户,每个客户每天交易三次的银行若要在计算机中存储一周所有客户的交易时间,只取两位数年份能为这家银行省下60兆字节的存储空间[9]。后来,随着科技的发展,到了20世纪70年代,磁芯存储器的价格逐渐下降到仅为每比特1美分[26]。而同时,具有同样价格,但尺寸更小且更便于使用的DRAM也开始逐步替代了磁芯存储器[28],打孔卡亦被逐渐淘汰,存储技术的进步和其价格的大幅降低使得存储空间不再是一个紧迫的问题。在程序中使用六位数日期的必要性也越来越低,但其并没有就此退出历史舞台,出于程序员们的习惯,以及为了保持向上兼容,这一日期表示法被一直沿用下来[29][27],即使当时已经有人提出过在这一日期表示法下潜藏的问题[30][31],但当时的程序员普遍都认为自己编写的程序不可能被持续使用到新千年,并没有理会这些警告[9][32]。
六位数日期表示法虽然的确在节省存储空间上发挥出了作用,但这种模糊的表示法也为未来埋下了隐患。人们在日常生活中为了方便有时也会只用两位数简称一个年份,但计算机和人类的区别在于,人类拥有能够理解并补全前两位年份数字的能力,但计算机没有。它们只会读取被实际写出来的后两位年份,无法自行变更没被实际写出来的前两位年份数字。这就导致了一个问题:在六位数日期下,2000年1月1日将会被转为01/01/00,然而,由于前两位年份没被实际写出来,也就无法进行变更,计算机就会继续将前两位默认为“19”,如此一来,就使得计算机会将2000年误认为1900年,认为被缩写为“00”的2000年要早于被缩写为“99”的1999年[30][6][9][33]。这会导致计算机在执行任何涉及到日期的任务时出错,甚至引发崩溃。例如,医生要使用一台计算机为一位出生在2000年3月16日的婴儿计算要为他使用的药物剂量,若这台计算机仍旧使用六位数日期表示法,其就会将这位婴儿误认为是一位出生在1900年3月16日的百岁老人,并对医生给出一个适用于老年人的药物剂量,但这个剂量对新生儿来说可能会是致命的。若不对该问题加以修复,诸如此类的故障会在2000年到来时在全球爆发,影响到所有依赖这些有缺陷的计算机运作的基础设施和军政机关,导致停电停水、医疗瘫痪、通信终止到导弹误射等一系列灾难性的后果[27][10][16]。
此外,2000年问题也会在除2000年1月1日以外的日期造成影响,并且也不止会导致计算机误判2000年及之后的年份。因为问题的根源是计算机无法变更前两位的年份数字,其也会导致计算机错误判定1900年之前的年份[10][34];一些使用数字99或9999作为文档终止标记或停止代码,且仍旧采用两位数年份表示法的计算机可能会在1999年9月9日出现故障;2000年问题还可能会使一些计算机无法将2000年正确识别为闰年,从而导致它们在2000年2月29日、3月1日、12月31日和2001年1月1日出现故障[3][35]。
引起关注
[编辑]1958年,当时在IBM工作的鲍勃·贝默在为耶稣基督后期圣徒教会编写族谱记录软件时意识到了六位数日期写法的缺陷[32],他在之后的数十年里不断在各处做出对六位数日期写法缺陷的担忧,并呼吁人们转用标准的八位完整日期写法,但都没有起到很大的作用。其于1971年在霍尼韦尔计算机期刊上发表了一篇题为《What's the Date?》的文章,建议人们使用ISO 2014标准的规范日期写法[31],这被认为是世界上第一篇公开发表的2000年问题警告文章[36],1979年,他再于杂志界面时代发表另一篇文章《Time and the computer》,进一步深入探讨了日期表示问题,他在这篇文章中也提到了2000年闰年问题[30]。
问题的引申
[编辑]有些程序可能会免在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”)。但如使用已废用的JavaScript“.getYear()”函数,利用“把4位年份数字减去1900”的方式来取得两位年份数字,则会出现“不正常”的结果,例如将2021年显示为“121”。
日本平成时代的结束与新千年虫
[编辑]1999年年底,在全世界程序员在为千年虫问题焦虑的的时候,日本程序员却灵机一动:如果继续沿用昭和(1926年开始)年号的话,千年虫会足足延后25年(延至2025年)。如此之长的时间足够解决这次的问题了。然而日本在2019年改元为令和时,不但要更改年号,而且昭和时代年号计算的“新千年虫”(昭和100年)马上就要来临(昭和100年问题)[37]。
参看
[编辑]参考文献
[编辑]- ^ Rose, Ted. The Etymology of "Y2K" Ted Rose. Slate. 1999-12-15 [2024-11-26]. (原始内容存档于2003-07-20) (英语).
- ^ 2.0 2.1 梁光汉. 認識「公元2000問題」刻不容緩. 香港电台. 1998-06-15 [2024-11-25]. (原始内容存档于2022-07-02) (中文(香港)).
- ^ 3.0 3.1 Wedekind, Lothar. 2000年的最后时刻离我们越来越近 (PDF). 国际原子能机构通报. 1999, 41 (2): 8-11 [2024-11-28].
- ^ 開箱老照片》20世紀最後一天 各界嚴陣以待千禧蟲危機. 中央通讯社. 2023-12-31 [2024-11-25] (中文(台湾)).
- ^ 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.0 6.1 de Jager, Peter. Doomsday 2000. Computerworld (IDG Enterprise). 1993-09-06, 27 (36): 105-108. ISSN 0010-4841.
- ^ Ullman, Ellen. The Myth of Order. Wired. 1998-04-01. ISSN 1059-1028 (美国英语).
- ^ Bristoll, Scott. The Year 2000 and Computers:What's All the Fuss About?. Cincinnati Enquirer. 1999-01-16. (原始内容存档于1999-01-17) (英语).
- ^ 9.0 9.1 9.2 9.3 9.4 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.0 10.1 10.2 10.3 Anson, Robert Sam. 12.31.99 The Y2K Nightmare. Vanity Fair. 1999-01 [2024-11-25] (美国英语).
- ^ 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) (美国英语).
- ^ Becker, Elizabeth. U.S. and Russia Agree on Joint Defense Against Y2K Debacles. The New York Times. 1999-10-28 [2023-03-12]. (原始内容存档于2023-03-12) (英语).
- ^ 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.
- ^ Levy, Steven. The Day The World Shuts Down. Newsweek. 1997-06-01 [2024-11-15] (英语).
- ^ Chong, Seck Chim. The coming big disaster. New Straits Times. 1998-07-28 [2024-11-28]. OCLC 1167649590 (英语).
- ^ 16.0 16.1 LACAY, RICHARD. The End of the World as We Know It?. TIME. 1999-01-18 [2024-11-26] (英语).
- ^ Nothing to fear but fear itself. The Economist. 1999-09-23. ISSN 0013-0613.
- ^ Huffstutter, P. j. Frightened by Y2K Bug, Many Go to Extremes. Los Angeles Times. 1999-02-10 [2024-11-26] (美国英语).
- ^ Uenuma, Francine. 20 Years Later, the Y2K Bug Seems Like a Joke—Because Those Behind the Scenes Took It Seriously. TIME. 2019-12-30 [2024-11-29] (英语).
- ^ Y2K: The good, the bad and the crazy. Computerworld. 2009-12-28 [2024-11-25]. (原始内容存档于2010-01-01) (英语).
- ^ Y2K bug fails to bite. BBC. 2000-01-01 [2024-11-16]. (原始内容存档于2023-03-12) (英语).
- ^ Lohr, Steve. '00 Computer Glitches Are Mostly a No-Show. The New York Times. 2000-01-01 [2023-03-12]. (原始内容存档于2023-03-12) (英语).
- ^ Y2K bug declared New Year's Day loser, but could make comeback Monday. CNN. 2000-01-01 [2023-03-12]. (原始内容存档于2023-03-12) (英语).
- ^ 任志刚. 撲滅「千年蟲」. 香港金融管理局. 2000-01-06 [2024-12-05]. (原始内容存档于2024-09-05) (中文(香港)).
- ^ Shirriff, Ken. Examining the core memory module inside a vintage IBM 1401 mainframe. 2015-08 [2024-11-30]. (原始内容存档于2024-11-30) (英语).
- ^ 26.0 26.1 Laboratory, National High Magnetic Field. Magnetic Core Memory – 1949 - Magnet Academy. nationalmaglab.org. [2024-11-28] (英语).
- ^ 27.0 27.1 27.2 de Jager, Peter. Y2K: So Many Bugs ... So Little Time. Scientific American. 1999-01, 280 (1): 66-71. ISSN 0036-8733.
- ^ 1970: Semiconductors compete with magnetic cores. Computer History Museum (英语).
- ^ Bemer, Robert W. Y2K Excuses (PDF). Bob Bemer's website. 1999-12-23 [2024-12-05] –通过Computer History Museum (美国英语).
- ^ 30.0 30.1 30.2 Bemer, Robert W. Time and the computer (PDF). Interface Age. 1979, 4 (2): 74-79.
- ^ 31.0 31.1 Bemer, Robert W. What's the Date?. Honeywell Computer Journal. 1971, 5 (4): 205-208.
- ^ 32.0 32.1 Sullivan, Patricia. Computer Pioneer Bob Bemer, 84. The Washington Post. 2004-06-25 [2024-12-10]. (原始内容存档于2023-02-12) (英语).
- ^ Chandrasekaran, Rajiv. Big Glitch at Nuclear Plant Shows Perils of Y2K Tests. The Washington Post. 1999-03-06 [2024-22-30] (英语).
- ^ Gibbs, Samuel. Y2K bug triggers army conscription notices sent to 14,000 dead men. The Guardian. 2014-07-11 [2024-11-26]. ISSN 0261-3077 (英国英语).
- ^ 内阁Y2K室; 内阁安全保障・危机管理室 (编). 2月29日に関する政府の対応について. 首相官邸トップページ. 2000-02-29 [2024-12-05]. (原始内容存档于2000-08-23) (日语).
- ^ TAYLOR, CHRIS. The History and the Hype. TIME. 1999-01-18 [2024-12-10] (英语).
- ^ 木村 岳史. 「昭和100年」問題が現実に?改元で浮かび上がった都市伝説. 日経クロステック(xTECH). 2019-06-25 [2024-12-05] (日语).