我正在使用Joda Time 2.3将字符串转换为java.lang.Date。Joda时间:日期转换错误
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
下面是一些测试代码:
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1927-12-11 11:22:38"));
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1927-12-11 11:22:38").toDate());
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1937-12-11 11:22:38"));
System.out.println(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("1937-12-11 11:22:38").toDate());
它运作良好,JDK 5和JDK 7下使用,但JDK 6时,其结果是:
1927-12-11T11:22:38.000+08:05:57
Sun Dec 11 11:22:33 CST 1927 // lose 5 second
1937-12-11T11:22:38.000+08:00
Sat Dec 11 11:22:38 CST 1937
你看到了第一次转换为java.lang.Date失去了5秒,但第二次是正确的。唯一的区别是年份数字,第一个是1927年,第二个是1937年.1927年以下的所有年份数字都会导致错误。
这对乔达来说肯定是错的。有人可以告诉我如何避免该错误,或者我必须使用SimpleDateFormatter。
谢谢!
@BasilBourque不完全相同,因为海报关注的是5秒tz版本的差异。我已经更新了我的答案,并给出了tzdb historica数据更改的明确链接。 –