Como llegar a la brecha DST y la superposición?

user2923322:

ZonedDateTimeno parece que permita detectar si la fecha dada se encuentra en una brecha el horario de verano o se superponen. Los documentos dicen que para el ofmétodo (la creación de una ZonedDateTime):

En el caso de una superposición, cuando los relojes se establecen de nuevo, hay dos compensaciones válidos. Este método utiliza la compensación temprana normalmente corresponde a "verano".

En el caso de una brecha, cuando los relojes saltar hacia adelante, no hay desplazamiento válido. En su lugar, la fecha, hora local se ajusta para que sea más tarde por la longitud de la brecha.

^ Como leídos anteriormente, este método sólo devuelve un valor, pero no me permitirá saber si se produce una brecha DST o se superponen.

Me gustaría saber si la fecha es proporcionado en un hueco o solapamiento, y tienen la fecha de inicio y fecha de fin de la brecha o se superponen.

Por ejemplo:

"01/09/1920 doce y diez" para la zona horaria "África / Accra" está en una brecha de DST .
La brecha es de "01/09/1920 00: 00: 00 + 00: 00" a "01/09/1920 00: 20: 00 + 00: 20" .

"30/12/1920 23:50" para la zona horaria "África / Accra" está en una superposición de horario de verano .
Las preocupaciones de solapamiento los períodos:
"30.12.1920 23: 40: 00 + 00: 20" a "12/31/1920 00: 00: 00 + 00: 20" y
"30/12/1920 23:40: 00 + 00: 00" a "12/31/1920 00: 00: 00 + 00: 00"

¿Cómo puedo obtener estas fechas en el caso de un hueco o solapamiento como en los ejemplos anteriores?

barredora:

Creo que no es físicamente posible crear una ZonedDateTimeque se encuentra en una transición brecha, porque los tiempos fecha local que una transición brecha se salta son técnicamente "inexistente", y ZonedDateTimees bastante estricto sobre esto. Dependiendo de su método, o bien lanzar una excepción o ajustar a la vez que existe.

Usted debe hacer esta comprobación con LocalDateTimes, no ZonedDateTimes.

ZoneRulestiene este método muy conveniente llamada getTransitionque toma una LocalDateTimey se da una ZoneOffsetTransition, lo que representa una transición de espacios / superposición, o nullsi ese tiempo la fecha no tiene una transición. Ejemplo:

System.out.println(ZoneId.of("Africa/Accra").getRules()
                    .getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));

Salida:

Transition[Gap at 1920-09-01T00:00Z to +00:20]

A continuación, puede obtener toda la información que desea (inicio, final, antes de desplazamiento, que se compensan después, la brecha / solapamiento etc) desde el ZoneOffsetTransitionobjeto.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=478585&siteId=1
Recomendado
Clasificación