代码之家  ›  专栏  ›  技术社区  ›  Ryaner

是什么导致了2010年的错误?

y2k
  •  18
  • Ryaner  · 技术社区  · 15 年前

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

    有人能帮我解释一下吗?

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

    10 回复  |  直到 14 年前
        1
  •  13
  •   Rasmus Faber    15 年前

    银行和电信中使用的几种协议 - 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
  •  13
  •   Richard Ev    15 年前

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

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

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

        3
  •  11
  •   Mark Byers    15 年前

    SpamMassassin有一条规则将日期标记为垃圾邮件:

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

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

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

    十年后再见。

        4
  •  4
  •   recursive    15 年前

    我有一个使用一位数年份字段的系统。对。一位数。所以这个系统失败的原因是“2000”和“2010”的表达是一样的。

        5
  •  4
  •   Rich Adams    15 年前

    我听说的是人们为千年虫所做的快速修复,而没有经过深思熟虑。因此,如果xx<10,则20xx,否则19xx。

        6
  •  4
  •   Richard Ev    15 年前

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

        7
  •  4
  •   Tj Kellie    15 年前

    上周末我在一个网站上处理了2010年的一点小故障,但这仅仅是由于编码上的疏忽造成的。

    有人认为将列表项的值设置为当前的datetime.year.now()是个好主意,因为该列表最多只包含2009个项。

    ddlItem.findByText(DateTime.Now.Year.ToString())
    
        8
  •  2
  •   JonH    15 年前

    以下是Norton Symantec端点保护的屏幕截图

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

    很高兴没有人@Symantec通知他们的客户… 直到文章发表: http://www.theregister.co.uk/2010/01/05/symantec_y2k10_bug/

        9
  •  2
  •   Tower    15 年前

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

        10
  •  2
  •   Greg Hewgill    15 年前

    我用谷歌代码搜索 find y2010 bugs in open source software . 我寻找了一个特定的模式来指示一个bug(使用“200%d”作为printf格式字符串),并找到了几个带有这个bug的项目。搜索模式的创造性应用可能会产生更多不同类型的错误。

    推荐文章