千年虫–维基百科

2000年问题(Year 2000 Problem,简称Y2K),大陆及香港常称为千年虫问题,台湾则称千禧虫危机,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时候,可能会出现不正确的操作,从而可能导致一些敏感的工业部门(比如电力,能源)和银行,政府等部门在2000年1月1日零点工作停顿甚至是发生灾难性的结果。

2000年问题在英文中通常缩写为Y2K。其中Y表示“year”也就是年,而K则表示拉丁前缀“kilo”,表示1000。Y2K或者就是指2000年。

一般来说,由于计算机程序中使用两个数字来表示年份,如1998年被表示为“98”、1999年被表示为“99”;而2000年被表示为“00”,这样将会导致某些程序在计算时得到不正确的结果,如把“00”误解为1900年。在嵌入式系统中可能存在同样的问题,这有可能导致设备停止运转或者发生更加灾难性的后果。

由于世界上各地的政府和企业都对两千年问题给予了足够的关注,1999年1月1日2000年3月1日并没有出现大范围的计算机故障。

 

 

程序问题

两千年问题始于1960年代,当时计算机内存和外部存储介质的成本很高,大多数数据处理需要借助于用穿孔卡片,它用80行文本表示所储存的数据。为了节省硬件成本,葛丽丝·霍普Harvard Mark I上,以6位数字来存储时间,即年、月、日各两位。这个习惯被COBOL继承下来,传播到整个计算机程序界。

那个时候的编程语言,如COBOLRPG,使用ASCII码和EBCDIC编码表示数据。如果用四位数字表示年份,就要多占用储存器空间,就会使成本增加,因此为了节省存储空间,计算机系统的编程人员采用两位数字表示年份,随着计算机技术的迅猛发展,虽然后来存储器的价格降低了,但在计算机系统中使用两位数字来表示年份的做法却由于思维上的惯性势力而被沿袭下来。对大多数程序员来讲,他们并不认为所编写的软件会持续使用很多年。

具体来讲,两千年问题要解决的事项包括以下几个要点:

两千年问题是由Bob Bemer1958年第一次提出的。在其后的二十年里,他用了很大的努力,希望政府、企业和国际组织(如IBMISO)来关注这个问题,但反响寥寥。直到2000年将要到来的时候,人们才感觉到两千年问题的紧迫性。于是社会和政府都投入了大量的人力和物力来避免发生大规模的计算机灾难。而从现在来看,这些努力也获取了相应的成果。

问题的引申

有些程序可能会免在2000年出现闰日而强行修改计算日期的过程。这些程序如果继续在将来的闰年使用的话,有可能会导致日期错乱。

另一方面,对于其它使用其它历法的地区,如台湾的民国纪年或泰国佛历,类似问题也有可能在稍后年份出现。例如:民国100年就在2011年。如果所用的软件没有解决两位年份的问题,那其实只是将两千年问题从2000年推迟11年后再发生。

对于目前在世界上广泛用作服务器软件的Unix系统来讲,由于传统的Unix系统使用32位的整型数表示日期(这个32位数字表示从1970年1月1日起至所存储日期过去了多少秒),因此在2038年日期将会被卷回,这类似于两千年问题。时间将可能重新从1970年1月1日开始计算,这将可能引起世界范围的计算机故障。这被称为2038年问题

此外仍然有一个问题:是否存在10000年问题。当然,在10000年时候互联网、人类文明、甚至世界有可能不再存在。

问题的延续[编辑]

展示JavaScript“.getYear()”函数问题的网页截图(详细介绍请点击图片)

另外,有不少人以为过了公元2000年之后,“千年虫”的问题就会自动消失。然而,若然没有对编程方式作合适的修订,问题在过了公元2000年依然会出现。以下为两个在公元2008年曾经出现的千年虫问题:

  • 2008年是闰年,所以这一年有2月29日。不过,有相当数量的摩托罗拉旧款手提电话在这一天由于系统无法表示这一日,电话的日期被系统强制重置为2001年1月1日。
  • 有的软件,如在现代浏览器下现已废用的JavaScript“.getYear()”函数,利用“把4位年份减去1900”的方式来获取两位年份的做法,而不是取年份的最后两位,因而会出现“不正常”的结果,例如将2007年显示为“107”。

 



 在设计计算机的程序时规定了的年份仅用两位数来表示,那么无论遇到是哪一个世纪的,计算机都会老老实实地取年份中的后两位来表示其年份,决不会采取四位数来表示年份的。也就是说,假如是1971年,在计算机里就会被表示为“71”,而假如是2002年,计算机就会将其年份表示为“02”。这样的话假如要计算相差多大,计算机要用02减去71了。这就是千年虫(计算机2000年问题)。

 

2000年问题导致应收款账目错误,出现错的已收或未收款数据。
销售核算功能的跨年销售、跨年定货处理将瘫痪,跨越一年期限的业务可能在1999年初就无法进行统计汇总。

到2000年,上年结转、月末结账、凭证过账将无法执行,因为当前计算机表示的日期为00年或80年或1900年。企业财务系统将停止运行。

固定资产管理系统的折旧计算、增减变更、原值计算等数据可能出现天文数字,企业固定资产报表将完全失真。

工资系统的年功工资计算可能导致负数,企业工资将无法发放。

美国联邦核管处更是担心全美的百余座核电厂里的仪器由于2000年问题失控造成核辐射外泄等灾难。
税务系统:税务局的电脑可能会认为你拖欠了100年的税款,从而寄来天文数字般的补税通知。
医药业:医疗仪器如救生系统或监视系统可能死机导致患者生命危急以及血库管理、医嘱系统与病历、器材管理全部无法正常运作。
交通系统:由于控制雷达的电脑失灵,空中管制完全瘫痪,班机停飞。

等,对社会产生了非常大的影响

发表评论

电子邮件地址不会被公开。 必填项已用*标注