java - current - ¿Cómo detectar una superposición ambigua de DST en Joda Time?
localdatetime java class (1)
Aproveche conEarlierOffsetAtOverlap ()
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));
}
En Joda Time , uno puede usar fácilmente el método DateTimeZone.isLocalDateTimeGap
para saber si una fecha y hora locales no son válidas porque caen en el espacio creado por una transición de horario de verano en primavera.
DateTimeZone zone = DateTimeZone.forID("America/New_York");
LocalDateTime ldt = new LocalDateTime(2013, 3, 10, 2, 0);
boolean inGap = zone.isLocalDateTimeGap(ldt); // true
¿Pero cómo se detecta la transición de retroceso? En otras palabras, si una fecha y hora local puede ser ambigua porque hay una superposición, ¿cómo la detecta ? Esperaría algo como zone.isLocalDateTimeOverlap
, pero no existe. Si lo hiciera, lo usaría así:
DateTimeZone zone = DateTimeZone.forID("America/New_York");
LocalDateTime ldt = new LocalDateTime(2013, 11, 3, 1, 0);
boolean overlaps = zone.isLocalDateTimeOverlap(ldt); // true
La documentación de Joda-Time deja en claro que si hay una superposición durante las conversiones, se tomará la posibilidad anterior a menos que se indique lo contrario. Pero no dice cómo detectar ese comportamiento.