2000年问题

维基百科,自由的百科全书
跳转至: 导航搜索

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”。

千年蟲騙案[编辑]

2000年之前,香港有不少騙徒宣稱有千年蟲杜蟲藥,誘騙對千年蟲問題一知半解的民眾購買(有部分不熟悉電腦的市民以為千年蟲是一種類似瘟疫傳染病病毒),是當時候典型的街頭騙案,電視節目警訊亦不時提醒市民慎防騙局。

参看[编辑]

外部連結[编辑]