3

JDK 6 中是否存在早期版本中不存在的问题?我有兴趣在 Timestamp.valueOf() 的工作方式中找出一些令人惊讶的变化,例如以下变化。

Timestamp.valueOf(),当提供包含单个数字的日期或月份的时间戳时。例如。2009-9-20、2009-9-3、2009-12-4 等在 JDK 6 中的行为不同 - 它抛出 IllegalArgumentException 表示时间戳格式不正确。而JDK 5(和更早的版本)工作得很好,提供了以'0'为前缀的正确值。

JDK 6 更加严格,因为该方法确实希望它的参数是 JDBC 时间戳转义格式的字符串。但是,这个 BREAKS 代码是用 JDK 5 编写的。

代码如:

String s = "2009-9-1 00:00:00";
Timestamp t = Timestamp.valueOf(s);

但是 JDK 6 可以将小时、分钟、秒设为个位数。通过查看 JDK 6 中 Timestamp 类的源代码,我找出了问题所在。我发现了一个数组 intDate[],它被初始化为 {4,2,2},并对照此检查日期中每个项目的长度大批。

现在为什么时间部分即使只有个位数也能正常工作?因为根据等效数组 intTime[] 检查长度的代码在源代码中已被注释掉。

JDK 5 中的 Timestamp 类没有任何这些检查,并且可以很好地处理这些输入。

我在官方网站的任何地方都没有发现这样的怪事。虽然我发现另一个人也有同样的问题。这个问题很容易解决,我有兴趣找出 JDK 6 中发生的其他此类奇怪的变化。

4

1 回答 1

7

官方称,

编辑

此外,您可以查看 Sun 的错误数据库。

链接显示 Java 中的 bug 类型的项目,状态为已接受,关键字“1.6 1.5”

我检查了其中一些,它看起来像你需要的。

于 2009-10-20T15:10:06.137 回答