java - JDK 6 中的陷阱

标签 java java-6 java-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 时间戳转义格式的字符串。但是,此 BREAKS 代码是用 JDK 5 编写的。

代码如下:

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

但是 JDK 6 可以将小时、分钟、秒设为个位数。通过查看 JDK 6 中 Timestamp 类的源代码,我已经弄清楚出了什么问题。我找到了一个初始化为 {4,2,2} 的数组 intDate[] 并对照此检查日期中每个项目的长度数组。

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

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

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

最佳答案

正式,this

编辑

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

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

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

关于java - JDK 6 中的陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1595307/

相关文章:

java - 将双foreach和if语句重构为java 8解决方案

java - 在 Java 中,是否可以使用资源路径获取 WAR 类路径中的目录文件列表?

java - 查找嵌套类的所有私有(private)字段及其相应的 getter/setter

java - 创建一个setter来提供java List实现类

java - 签署 jar 文件需要什么?

java - 为什么在 x64 Java 中 long 比 int 慢?

java - Java 字节码在同一版本的 Java 的不同更新中是否兼容?

java - 忽略命名空间的 JAXB 解码将元素属性转换为 null

java - 带有默认抛出子句的枚举?

java - 为什么我的 ButtonGroup 给出 "<identifier> expected"错误?