是什么导致2010年的错误?

时间:2010-01-05 16:03:49

标签: y2k

有很多关于系统无法理解2010年的报道,但我不知道为什么。我认为目前的系统工作正常,但我想知道实际问题是什么,以便更好地搜索。

有人能说清楚吗?

修改:http://www.rte.ie/business/2010/0105/bug.html - 有关影响德国信用卡的信息

10 个答案:

答案 0 :(得分:13)

一个可能的解释是在下面的文章中

http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

  

让我想起你最近关于廉价和肮脏的Y2K错误修复的文章,其中一些不道德的程序员输入一个简单的if< 10 = 20xx,否则日期是19xx

答案 1 :(得分:13)

银行和电信中使用的几种协议- including the SMS protocol - 在一个字节中将年份编码为BCD

从2000年到2009年,由于编码方式相同,人们很容易将错误解释为年份作为标准二进制数:

Encoding  Binary-interpreted  BCD-interpreted
0x01      2001                2001
0x02      2002                2002
...
0x09      2009                2009
0x10      2016                2010
...

这很可能是Windows Mobile错误的原因。

答案 2 :(得分:11)

SpamAssassin规定将日期标记为垃圾邮件太远:

/20[1-9][0-9]/

修复来得太晚了,但这很简单:

/20[2-9][0-9]/

十年后再见。

答案 3 :(得分:4)

我有一个使用一位数年份字段的系统。是。一位数。因此,该系统失败的原因是“2000”表示与“2010”相同。

答案 4 :(得分:4)

我听到的那个是人们为Y2K做的快速修复,却没有考虑过。所以如果xx< 10然后20xx其他19xx。

答案 5 :(得分:4)

这可能是由于年轻的开发者在Y2K之后开始他们的职业生涯并使用1位数代表年份。

答案 6 :(得分:4)

上周末我在一个网站上处理了一个小小的2010年失败,但这只是编码监督的结果。

当列表中只包含截至2009年的项目时,有人认为将列表项的值设置为当前dateTime.year.Now()是个好主意。

ddlItem.findByText(DateTime.Now.Year.ToString())

答案 7 :(得分:2)

以下是诺顿赛门铁克端点保护的屏幕截图

alt text http://img695.imageshack.us/img695/4500/152010112800am.jpg

非常好,@ symantec没有人通知他们的客户...... 直到文章发布:http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

答案 8 :(得分:2)

组件中存在一个错误,将一年分为两部分。第二部分用于比较,以便数字10不在基数10中,它在基数16中意味着它是0x10 = 16(十六进制)。

答案 9 :(得分:2)

我使用Google代码搜索find y2010 bugs in open source software。我查找了一个特定模式,表明存在错误(使用“200%d”作为printf格式字符串),并找到了几个带有该错误的项目。搜索模式的创造性应用可能会出现更多不同类型的错误。