18

有很多关于系统无法理解 2010 年的报告,但我不知道为什么。据我所知,我照顾的当前系统运行良好,但我想知道更好地搜索的实际问题是什么。

有人可以解释一下吗?

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

4

10 回答 10

13

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

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

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

于 2010-01-05T16:12:03.047 回答
13

银行和电信中使用的几种协议(包括 SMS 协议)将年份编码为单个字节中的BCD 。

从 2000 年到 2009 年,人们很容易犯错误,将年份解释为标准二进制数,因为编码是相同的:

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

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

于 2010-01-06T15:16:13.623 回答
11

SpamAssassin 有一条规则,可以将未来太远的日期标记为垃圾邮件:

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

修复来得太晚了几天,但它很简单:

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

十年后再见。

于 2010-01-05T16:14:41.607 回答
4

我有一个使用一位数字年份字段的系统在工作。是的。一位数。所以这个系统失败的原因是“2000”与“2010”的表达方式相同。

于 2010-01-05T16:07:30.787 回答
4

我听说的一个是人们为 Y2K 所做的快速修复,而没有经过深思熟虑。所以如果 xx < 10 那么 20xx 否则 19xx。

于 2010-01-05T16:11:16.107 回答
4

这可能是由于年轻的开发人员在 Y2K 之后开始了他们的职业生涯,并且使用 1 位来表示年份。

于 2010-01-05T16:16:44.770 回答
4

上周末我在一个网站上处理了一个 2010 年的小故障,但这只是编码疏忽的结果。

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

ddlItem.findByText(DateTime.Now.Year.ToString())
于 2010-01-05T16:19:08.250 回答
2

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

替代文字 http://img695.imageshack.us/img695/4500/152010112800am.jpg

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

于 2010-01-05T16:29:41.093 回答
2

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

于 2010-01-05T16:59:14.283 回答
2

我使用谷歌代码搜索来查找开源软件中的 y2010 错误。我寻找了一种表明存在错误的特定模式(使用“200%d”作为 printf 格式字符串),并发现了几个具有该错误的项目。搜索模式的创造性应用可能会出现更多不同类型的错误。

于 2010-01-07T20:42:49.040 回答