陷入JDK 6

Vij*_*Dev 3 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);
Run Code Online (Sandbox Code Playgroud)

然而,JDK 6很好,小时,分钟,秒为单位数.通过查看JDK 6中Timestamp类的源代码,我发现了什么是错的.我找到了一个数组intDate [],它被初始化为{4,2,2},并且根据这个来检查日期中每个项目的长度阵列.

现在为什么时间部分工作正常,即使它们有单个数字?因为检查长度与等效数组intTime []的代码在源中被注释掉了.

JDK 5中的Timestamp类没有任何这些检查,并且可以正常使用这些输入.

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

Osc*_*Ryz 7

这是正式的

编辑

另外,您可以查看Sun的错误数据库.

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

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