2000 年问题:修订间差异
跳转到导航
跳转到搜索
→问题由来
正义羊-JRJSheep(讨论 | 贡献) (→问题表现) |
正义羊-JRJSheep(讨论 | 贡献) (→问题由来) |
||
| 第 15 行: | 第 15 行: | ||
=== 问题表现 === | === 问题表现 === | ||
2000 年问题是由于程序设计缺陷产生的问题。最为显著的表现是,如前所述,在六位数日期下,2000 年 1 月 1 日将会被自动转换为 {{code|01/01/00}}。然而,由于前两位年份并没有被实际写出来,自然也就无法进行变更,计算机就会继续将年份的前两位默认为 19。如此一来,计算机就会错误的将 2000 年误认为是 1900 年,认为被缩写为 00 的 2000 年要早于被缩写为 99 的 1999 年。 | |||
2000 年问题并不仅限于 2000 年 1 月 1 日这个日期会造成影响,而且会导致计算机误判 2000 年及以后的年份,问题的根源实际上是计算机无法自动变更前两位的年份数字,由于无法自动变更,自然也会导致错误判定 1900 年以前的年份。某些使用数字 99 或 9999 作为文档的终止标记或停止代码,且仍然使用两位数表示年份的计算机可能会在 1999 年 9 月 9 日出现故障。此外,某些计算机使用了不正确的闰年识别方法,导致其无法将 2000 年正确识别为闰年,从而导致这些计算机在 2000 年 2 月 29 日、3 月 1 日、12 月 31 日,以及 2001 年 1 月 1 日出现故障。这样的问题也属于 2000 年问题的范畴。 | |||
除了上述的原因之外,导致 2000 年问题的原因也包括在程序编写时将 19 硬编码到软件子程序中、采用了可能致使存储寄存器溢出的日期数据类型。 | |||
问题举例 | |||
=== 问题举例 === | |||
医生要使用计算机来为一名在 2000 年出生的婴儿计算要为他/她使用的药物剂量,若这台计算机仍然在使用六位数日期表示法,那么在这台计算机的逻辑中会错误的将这名婴儿误认为是一位出生于 1900 年的百岁老人,并向医生给出一个适用于老年人的药物剂量,而非新生儿的药物剂量,而此时给出的药物剂量对于一个新生儿来说可能是致命性的。 | |||
另一个例子是,税务部门为一家企业计算各类应缴税。由于使用六位数日期,2000 年会被转换为 00,在计算机的运行中,由于前两位被默认为 19,年份会变成 1900年,这就导致计算机会认为企业有 100 年没有缴税,企业的应缴税也将会从原本的几千到几十万瞬间变成企业无法承受的天文数字。 | |||
== 注 == | == 注 == | ||