Illegal instant due to time zone offset transition (Asia/Shanghai) - Joda.time

一,问题描述

  通过DateTime获取某年某月某日的时间戳,然后使用joda-time的Period.getYears()比较两个时间相差的年数。当new DateTime("1990-04-15")报错如下:

  

threw exception [Request processing failed; nested exception is org.joda.time.IllegalInstantException: Cannot parse "
1986-05-04": Illegal instant due to time zone offset transition (Asia/Shanghai)] with root cause]
org.joda.time.IllegalInstantException: Cannot parse "1986-05-04": Illegal instant due to time zone offset transition (Asia/Shanghai)
at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:471) ~[joda-time-2.9.4.jar!/:2.9.4]
at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:411) ~[joda-time-2.9.4.jar!/:2.9.4]
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:928) ~[joda-time-2.9.4.jar!/:2.9.4]
at org.joda.time.DateTime.parse(DateTime.java:160) ~[joda-time-2.9.4.jar!/:2.9.4]

通过遍历1900-2500年所有时间发现并不是所有时间都会报错,只有1940-06-03、1941-03-16、1986-05-04、1987-04-12、1988-04-10、1989-04-16、1990-04-15、1991-04-14几个时间会有如上错误抛出..

二 原因

  new DateTime("1990-04-15")时未指定时区,导致无法找到该时间对应的时间戳。

三,解决方案

  new DateTime("1990-04-15")时指定时区,如:new DateTime("1990-04-15", DateTimeZone.forID("+08:00"))

原文:https://blog.csdn.net/u010954806/article/details/79064130

猜你喜欢

转载自www.cnblogs.com/yanglw/p/11303152.html
今日推荐