2000年问题

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

2000年问题(英语:Year 2000 Problem,简称:Y2K),中国大陆香港常称千年虫问题[1][2]台湾则称千禧蟲危机[3],是指由于当时的计算机程序在日期表达上的设计问题,导致计算机会误读在2000年后的一些日期,并进一步导致计算机出现错误所引起的计算机问题。当时的计算机程序普遍采用6位数字来存储时间,只显示四位数字后的两位数字,但这会导致计算机系统紊乱,使其无法区分2000年与1900年,从而导致了误读问题[4][5][6],并导致计算机紊乱。2000年问题可能会威胁到那些运行在重要行业中的计算机与大量社会基础设施,甚至影响到政府部门军队。从而导致停水、断电,银行瘫痪,最极端的情况下,它甚至可能会导致核电厂发生事故[7]核武器导弹失控[8][9][10]以及交通与通信的中断,并最终引发灾难性的后果[11]

图中就是2000年问题所造成后果的一个实例,这个悬挂于南特中央理工学院的电子标志将2000年1月3日错误显示为了1900年1月3日。

但最终,在2000年问题引起社会广泛重视后,它得到了足够的关注与处理,最终在规模庞大的修复行动后,它没有在新千年到来之际引起全球电脑系统的大规模瘫痪[12][13][14]

程序问题

编辑

两千年问题始于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年问题。当然这是一个遥不可及的问题。

问题的延续

编辑
 
展示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上抱怨难以维护这些老旧计算机代码问题。[15][16]

千年虫骗案

编辑

在2000年之前,香港有不少骗徒宣称有千年虫蛀虫药,诱骗对千年虫问题一知半解的民众购买(有部分不熟悉电脑的市民以为千年虫是一种类似瘟疫传染病病毒),是当时典型的街头骗案,电视节目《警讯》亦不时提醒市民慎防骗局。[17][18]

参看

编辑

参考文献

编辑
  1. ^ 2000 年的最后时刻离我们越来越近 (PDF). iaea.org. [2023-02-20]. 
  2. ^ 香港金融管理局. 香港金融管理局 - 扑灭「千年虫」. 香港金融管理局. [2023-02-20]. (原始内容存档于2023-03-06) (中文(中国大陆)). 
  3. ^ 开箱老照片》20世纪最后一天 各界严阵以待千禧虫危机页面存档备份,存于互联网档案馆),中央社
  4. ^ For Computers, the Year 2000 May Prove a Bit Traumatic. archive.nytimes.com. [2023-03-12]. (原始内容存档于2023-03-12). 
  5. ^ November 1998. Controlling the Y2K Bug. Pest Control Technology. [2023-02-20]. (原始内容存档于2023-03-06) (英语). 
  6. ^ The Y2K Computer Bug. cs.calvin.edu. [2023-02-20]. (原始内容存档于2023-03-06). 
  7. ^ 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) (美国英语). 
  8. ^ Nuclear war fear over Y2K bug. The Independent. 1999-12-19 [2023-03-19]. (原始内容存档于2023-05-04) (英语). 
  9. ^ U.S. and Russia Agree on Joint Defense Against Y2K Debacles. archive.nytimes.com. [2023-03-12]. (原始内容存档于2023-03-12). 
  10. ^ 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. 
  11. ^ 01/01/00. Macworld. [2023-02-20]. (原始内容存档于2023-03-06) (英语). 
  12. ^ BBC NEWS | Science/Nature | Y2K bug fails to bite. news.bbc.co.uk. [2023-03-12]. (原始内容存档于2023-03-12) (英语). 
  13. ^ '00 Computer Glitches Are Mostly a No-Show. archive.nytimes.com. [2023-03-12]. (原始内容存档于2023-03-12) (英语). 
  14. ^ CNN - Y2K bug declared New Year's Day loser, but could make comeback Monday - January 1, 2000. edition.cnn.com. [2023-03-12]. (原始内容存档于2023-03-12). 
  15. ^ 明明才2019年,日本却又要面对千年虫问题?岛国程序员崩溃_网易订阅. dy.163.com. [2019-07-28]. (原始内容存档于2019-07-28). 
  16. ^ 为什么改元“令和”,竟然成了日本程序员的魔咒?. tech.ifeng.com. [2019-07-28]. (原始内容存档于2019-07-28). 
  17. ^ 福州晚報. web.archive.org. 2016-03-05 [2019-07-28]. 原始内容存档于2016-03-05. 
  18. ^ 留心今年骗徒十大骗术. web.archive.org. 2016-03-05 [2019-07-28]. 原始内容存档于2016-03-05. 

外部链接

编辑