Java jdk7u25是否引入了时区错误?

Java jdk7u25是否引入了时区错误?,java,timezone,java-7,Java,Timezone,Java 7,在9个月的不活动之后,我选择更新我的软件,包括从jdk7u17更新到u51。我的一些测试开始失败。这里有一个: public void testSimpleDateFormatDefaultTimeZone() throws ParseException { TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai")); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-

在9个月的不活动之后,我选择更新我的软件,包括从jdk7u17更新到u51。我的一些测试开始失败。这里有一个:

public void testSimpleDateFormatDefaultTimeZone() throws ParseException {
    TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    long millis = sf.parse("1927-12-31 23:54:08").getTime()
        - sf.parse("1927-12-31 23:54:07").getTime();
    assertEquals(millis, 353000L);


    sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    millis = sf.parse("1927-12-31 23:54:08").getTime()
        - sf.parse("1927-12-31 23:54:07").getTime();
    assertEquals(millis, 353000L);


    sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    millis = sf.parse("1927-12-31 23:54:08").getTime()
        - sf.parse("1927-12-31 23:54:07").getTime();
    assertEquals(millis, 1000L);
}

它通过u17,并在从u25开始的第一次assertEquals时失败。u21还可以。从u25开始,millis被计算为1000。

正如评论中已经指出的,这不是一个bug,而是一个2年前已经部署到jdk6的未报告的bug修复。

看看这个问题:这个问题实际上引导我创建了这个测试。:-)问题在于,这个问题的原因显然随着u25的出现而消失了…?这种差异可以用1927-12-31 23:54:08在上海发生过两次来解释。也许它解析到哪个版本的选择已经从一个版本更改为另一个版本了?如果选择第一个实例,时间差为1秒(1000毫秒),如果选择另一个实例,时间差为353秒。作为bug提交给oracle。