陷入JDK 6

时间:2009-10-20 15:06:35

标签: java jdk1.6 jdk1.5

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

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

JDK 6只是更严格,因为该方法确实认为它的参数是JDBC时间戳转义格式的String。但是,这个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类没有任何这些检查,并且可以正常使用这些输入。

我没有在官方网站的任何地方找到这样的奇怪之处。虽然我发现另一个人有same problem。这个问题很容易解决,我有兴趣找到JDK 6中发生的其他奇怪的变化。

1 个答案:

答案 0 :(得分:7)

正式,this

修改

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

这个link显示了Java类型的bug,其中包含接受状态的bug和关键字“1.6 1.5”

我检查了一些,看起来就像你需要的那样。