在Joda Time中,可以很容易地使用该DateTimeZone.isLocalDateTimeGap
方法来判断本地日期和时间是否无效,因为它落入了由春季向前夏令时转换所造成的差距。
DateTimeZone zone = DateTimeZone.forID("America/New_York");
LocalDateTime ldt = new LocalDateTime(2013, 3, 10, 2, 0);
boolean inGap = zone.isLocalDateTimeGap(ldt); // true
但是你如何检测回退转换呢?换句话说,如果本地日期和时间由于重叠而可能不明确,您如何检测到呢?我会期待类似的东西zone.isLocalDateTimeOverlap
,但它不存在。如果是这样,我会像这样使用它:
DateTimeZone zone = DateTimeZone.forID("America/New_York");
LocalDateTime ldt = new LocalDateTime(2013, 11, 3, 1, 0);
boolean overlaps = zone.isLocalDateTimeOverlap(ldt); // true
Joda-Time 文档清楚地表明,如果在转换过程中存在重叠,除非另有说明,否则它将采用较早的可能性。但它没有说明如何检测这种行为。