Como chegar a lacuna DST e se sobrepõem?

user2923322:

ZonedDateTimenão parece permitir detectar se a data dada é uma lacuna DST ou sobreposição. Os médicos dizem para o ofmétodo (a criação de um ZonedDateTime):

No caso de uma sobreposição, quando os relógios são ajustados para trás, há duas compensações válidos. Este método usa o anteriormente compensados ​​normalmente correspondente a "verão".

No caso de uma lacuna, quando os relógios saltar para a frente, não há deslocamento válido. Em vez disso, a data-hora local é ajustada para ser mais tarde pelo comprimento da lacuna.

^ Como lido anteriormente, este método irá retornar apenas um valor, mas não me permite saber se uma lacuna DST ou sobreposição ocorre.

Gostaria de saber se a data prevista é uma lacuna ou sobreposição, e tem a data de início e término da lacuna ou sobreposição.

Por exemplo:

"1920/09/01 00:10" para o fuso horário "África / Accra" está em uma lacuna DST .
A diferença é a partir de "1920/09/01 00: 00: 00 + 00: 00" para "1920/09/01 00: 20: 00 + 00: 20" .

"1920/12/30 23:50" para o fuso horário "África / Accra" está em uma sobreposição DST .
As preocupações de sobreposição dos períodos:
"1920/12/30 23: 40: 00 + 00: 20" para "1920/12/31 00: 00: 00 + 00: 20" e
"1920/12/30 23:40: 00 + 00: 00" para "1920/12/31 00: 00: 00 + 00: 00"

Como posso obter essas datas, no caso de uma lacuna ou sobreposição como nos exemplos acima?

Sweeper:

Eu não acho que isso é fisicamente possível para criar uma ZonedDateTimeque está em uma transição lacuna, porque os tempos data local que uma transição lacuna pula são tecnicamente "inexistente", e ZonedDateTimeé bastante rigoroso sobre isso. Dependendo do seu método, ele quer lançar uma exceção ou ajustar a um tempo que existe.

Você deve fazer essa verificação com LocalDateTimes, não ZonedDateTimeé.

ZoneRulestem este método muito conveniente chamada getTransitionque leva um LocalDateTimee dá-lhe uma ZoneOffsetTransition, o que representa uma transição lacuna / sobreposição, ou nullse esse tempo de data não tem uma transição. Exemplo:

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

Resultado:

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

Você pode, então, obter todas as informações que você quer (início, fim, compensado antes, compensado depois, lacuna / sobreposição etc) a partir do ZoneOffsetTransitionobjeto.

Acho que você gosta

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