今年你将在新闻中不断听到关于“2000年问题”的报道。在此过程中,你也会听到许多相互矛盾的信息。互联网上还充斥着不少“世界末日”的论调。你该相信什么?
在本期How Stuff Works中,我们将讨论2000年问题(也称为Y2K问题),以便你准确了解正在发生什么以及正在采取哪些措施。你还可以浏览各种链接。通过这些信息,你可以得出自己明智的结论。
广告
什么是Y2K问题?
Y2K问题的原因相当简单。直到最近,计算机程序员们习惯在他们的软件中使用两位数来表示日期的年份部分。例如,典型保险单或信用卡的到期日期在计算机文件中以月/日/年格式存储(例如 - 08/31/99)。程序员这样做有多种原因,包括:
- 这是每个人在日常生活中使用日期的方式。当你手写支票并使用日期的“斜线”格式时,你就是这样写的。
- 存储2位数字比存储4位数字占用的空间更少(现在硬盘如此便宜,这不是什么大问题,但在老旧机器上曾经是个大问题)。
- 直到最近,标准机构才建议使用4位日期格式。
- 没有人预料到这些软件会有如此长的寿命。1970年编写软件的人没有理由相信这些软件在30年后仍在使用。
当年份输入“00”时,两位数年份格式给大多数程序带来了问题。软件不知道是将“00”解释为“1900”还是“2000”。因此,大多数程序默认为1900年。也就是说,大多数程序员编写的代码要么在两位数日期的前面加上“19”,要么不对世纪做任何假设,因此默认是“19”。这本来不是问题,除非程序对日期进行大量计算。例如,为了计算你的年龄,程序会用今天的日期减去你的出生日期。这种减法在两位数年份的日期上运作良好,直到今天的日期和你的出生日期处于不同的世纪。那时计算就不再起作用了。例如,如果程序认为今天的日期是1/1/00,而你的生日是1/1/65,那么它可能会计算出你是-65岁而不是35岁。结果,日期计算给出错误的输出,软件崩溃或产生错误的结果。
重要的是要认识到,这就是全部了。这就是整个2000年问题。许多程序员在他们的程序中使用了两位数年份格式,结果他们的日期计算在2000年1月1日将无法得出正确答案。仅此而已。
解决方案显然是修复程序,使其正常工作。有几个标准解决方案:
- 重新编码软件,使其理解00、01、02等年份实际上意味着2000、2001、2002等。
- 通过对年份使用4位占位符并重新编码所有软件以处理4位日期,从而“彻底解决问题”。[一个有趣的问题:为什么年份要用4位数字?为什么不用5位,甚至6位?因为大多数人认为8000年后没有人会再使用这个软件了,这似乎是个合理的假设。现在你可以明白我们是如何陷入Y2K问题的了……]
从概念层面来看,这些修复都很容易做到——你进入代码,找到每个日期计算并修改它们以正确处理。只是软件中有数百万个地方需要修复,而且每次修复都必须手动完成并进行测试。例如,一家保险公司可能有2000万到3000万行代码来执行其保险计算。代码中可能有10万或20万个日期计算。根据代码的编写方式,程序员可能需要手动修改程序中每个使用日期的地方。然后他们必须测试每一个更改。在大多数情况下,测试是最困难的部分——可能需要大量时间。
如果你估算每次修改和测试需要一天时间,并且有10万次修改需要完成,一个人每年工作200天,那么这意味着需要500人一年才能完成所有修改。如果你还考虑到大多数公司没有500名闲置程序员坐等一年来完成这项工作,他们必须雇用这些人,你就会明白这可能成为一个相当昂贵的问题。如果你估算一个程序员每年花费大约15万美元(包括程序员的工资、福利、办公空间、设备、管理、培训等所有费用),你就会明白修复一个大型程序中所有日期计算可能花费一家公司数千万美元。
广告