java – JDK 6中的陷阱
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中发生的其他奇怪的变化. 解决方法
正式,this
编辑 另外,您可以查看Sun的错误数据库. 这个link显示了Java类型的bug,其中包含接受状态和关键字“1.6 1.5” 我检查了一些,它看起来像你需要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |