今年您将会在新闻中不断听到关于“2000年”的问题。而且在此过程中您会听到很多互相矛盾的信息。还会有很多关于“世界末日”的奇谈怪论在互联网上流传。您应该相信什么?
在本文中,我们将讨论2000年问题(也叫做Y2K问题),以便您能确切地了解将会发生什么以及将要对其采取什么措施。您还可以通过各个链接进行深入的探索。通过这些信息,您可以得出自己明智的结论。
什么是Y2K问题?
Y2K问题的原因很简单。直到前不久,计算机编程人员一直都习惯于在他们的软件中使用两位数的占位符来表示日期中的年份。例如,典型的保险公司保单或信用卡的到期日期都以 MM/DD/YY(例如08/31/99)格式存储在计算机文件中。编程人员这样做有多个原因,其中包括:
- 人们在日常生活中都是这样处理日期的。当您用手写支票并使用“斜杠”格式来表示日期时,你就是那样写的。
- 存储2位数字要比存储4位数字少占用硬盘空间(现在硬盘空间不算什么事,因为硬盘价格低廉;但是在老式的机器上这却是个大问题)。
- 直到前不久,一些标准机构才推荐使用4位数的日期格式。
- 没人会想到软件的寿命会有那么长。在1970年编写软件的人没有理由相信该软件在30年以后仍然在使用。
当输入“00”来代表年份时,两位数的年份格式会给大多数程序造成问题。软件不知道究竟应该把“00”理解为“1900”还是“2000”。于是大多数软件把它默认为1900。也就是说,大多数编程人员编写的代码或者假设那两个数字前面有“19”,或者根本就没有考虑到世纪问题,因此将其默认为“19”。这本不是问题,除非程序要执行很多有关日期的计算。例如要计算您的年龄,程序将取今天的日期,然后从中减去您的出生日期。如果今天的日期和您的出生日期不是跨越不同的世纪的话,这个减法会很正常的运算。如果跨越不同的世纪,则这个运算将不会正常运行。例如,如果程序认为今天是00年1月1日,而您的出生日期是65年1月1日,则它可能会算出您今年是-65岁而不是35岁。因此,日期计算得出错误的输出,软件崩溃或产生错误的结果。
需要认清的重要一点是,问题的所在仅此而已。这就是2000年问题的全部内容。很多编程人员在他们的程序中使用两位数来表示年份,因此程序的日期计算在2000年1月1日将不能得出正确的答案。问题仅此而已。
显然,解决方案是修复这些程序,使其能正常运行。标准解决方案有下面几个:
- 改写软件代码,使软件能理解像00、01、02等这样的年份指的是2000年、2001年、2002年等。
- 通过使用4位占位符来表示年份并且把所有软件的代码改写为能处理4位数的日期来“真正解决问题”。(关于此问题的有趣思考——为什么使用4位数来表示年份?为什么不用5位数,甚至6位数?因为大多数人都会认为不会有人在距今8,000年的时间后仍然使用那个软件,这似乎像是合理的假设。现在您可以明白我们是如何陷入Y2K问题的了。)
这些修复方法从概念层面上看很容易解决——找到代码,找出每个日期计算并将其更改为能正确处理日期就行了。问题在于在软件中有几百万个地方需要修复,每次修复不得不用手工进行,随后还要进行测试。例如,一家保险公司可能有2千万或3千万行代码在执行其保险金计算。在代码内部可能有10万或20万个日期计算。根据代码的编写方法,编程人员可能不得不用手工进入代码,并修改程序中使用日期的每个点。随后他们还必须测试每个更改。在大多数情况下测试是个难题——可能需要很长时间。
假设每个更改并测试需要一天,并且需要进行10万次更改,而一个人一年工作200天,则这意味着需要500人一年的时间才能完成所有这些更改。再假设多数公司没有500名闲置的编程人员在那里坐上一年来做这件事,并且公司不得不雇用这些人来从事这件事,您就会明白为什么修复这个问题的代价会如此昂贵。假设一个编程人员的费用是一年15万美元(包括一切费用,如编程人员的薪金、福利、办公空间、设备、管理、培训等),您就会明白,若要修改一个大型程序中的所有日期计算可能要花掉公司几千万美元。