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中发生的其他奇怪的变化。