Java 如何在Joda时间内检测不明确的DST重叠?

Java 如何在Joda时间内检测不明确的DST重叠?,java,timezone,jodatime,dst,Java,Timezone,Jodatime,Dst,在中,可以很容易地使用该方法来判断本地日期和时间是否无效,因为它落入了前向日光节约时间转换产生的间隙 DateTimeZone zone = DateTimeZone.forID("America/New_York"); LocalDateTime ldt = new LocalDateTime(2013, 3, 10, 2, 0); boolean inGap = zone.isLocalDateTimeGap(ldt); // true 但是如何检测回退过渡?换句话说,如果本地日期和时间

在中,可以很容易地使用该方法来判断本地日期和时间是否无效,因为它落入了前向日光节约时间转换产生的间隙

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文档清楚地表明,如果转换过程中出现重叠,除非另有说明,否则将采用更早的可能性。但它没有说明如何检测这种行为。

利用

public static boolean isInOverlap(LocalDateTime ldt, DateTimeZone dtz) {
    DateTime dt1 = ldt.toDateTime(dtz).withEarlierOffsetAtOverlap();
    DateTime dt2 = dt1.withLaterOffsetAtOverlap();
    return dt1.getMillis() != dt2.getMillis();
}


public static void test() {
    // CET DST rolls back at 2011-10-30 2:59:59 (+02) to 2011-10-30 2:00:00 (+01)
    final DateTimeZone dtz = DateTimeZone.forID("CET");
    LocalDateTime ldt1 = new LocalDateTime(2011,10,30,1,50,0,0); // not in overlap
    LocalDateTime ldt2 = new LocalDateTime(2011,10,30,2,50,0,0); // in overlap
    System.out.println(ldt1 + " is in overlap? " + isInOverlap(ldt1, dtz)); 
    System.out.println(ldt2 + " is in overlap? " + isInOverlap(ldt2, dtz)); 
}