加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – JDK 6中的陷阱

发布时间:2020-12-15 08:31:05 所属栏目:Java 来源:网络整理
导读:JDK 6中是否存在早期版本中不存在的问题?我有兴趣在Timestamp.valueOf()的工作方式中找到一些令人惊讶的变化,如下面的变化. Timestamp.valueOf(),提供时间戳,其中包含带有单个数字的日期或月份.例如. 2009-9-20,2009-9-3,2009-12-4等,在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”

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读