ZonedDateTime
ne semble pas permettre de détecter si la date donnée est dans un intervalle de l' heure d' été ou se chevauchent. Les documents dire pour le of
procédé (création d' un ZonedDateTime
):
Dans le cas d'un chevauchement, lorsque les horloges sont en retrait, il y a deux décalages valides. Cette méthode utilise le plus tôt compensé généralement correspondant à « l'été ».
Dans le cas d'un écart, quand les horloges sautent vers l'avant, il n'y a pas de décalage valides. Au lieu de cela, la date-heure locale est réglée pour être plus tard par la longueur de l'intervalle.
^ Comme lu ci-dessus, cette méthode va juste retourner une valeur, mais ne me permet pas de savoir si un écart de l'heure d'été ou un chevauchement se produit.
Je voudrais savoir si la date prévue est dans un espace ou se chevauchent, et ont la date de début et de fin de l'écart ou se chevauchent.
Par exemple:
« 01/09/1920 00:10 » pour le fuseau horaire « Afrique / Accra » est dans un écart de l' heure d' été .
L'écart est de "01/09/1920 00: 00: 00 + 00: 00" à "01/09/1920 00: 20: 00 + 00: 20" .
« 30/12/1920 23:50 » pour le fuseau horaire « Afrique / Accra » est dans un chevauchement de l' heure d' été .
Le chevauchement concerne les périodes:
"30/12/1920 23: 40: 00 + 00: 20" à "31/12/1920 00: 00: 00 + 00: 20" et
« 30/12/1920 23:40: 00 + 00: 00" à "31/12/1920 00: 00: 00 + 00: 00"
Comment puis-je obtenir ces dates en cas d'écart ou de chevauchement comme dans les exemples ci-dessus?
Je ne pense pas qu'il est physiquement possible de créer un ZonedDateTime
qui est dans une transition de l' écart, car les temps de date locale qu'une transition gap saute sont techniquement « inexistante », et ZonedDateTime
est assez stricte à ce sujet. Selon la méthode, il soit lancer une exception ou adapter à un temps qui existe.
Vous devriez le faire vérifier avec LocalDateTime
s, pas ZonedDateTime
s.
ZoneRules
a cette méthode très pratique appelée getTransition
qui prend LocalDateTime
et vous donne un ZoneOffsetTransition
, ce qui représente une transition écart / chevauchement, ou null
si cette date heure n'a pas de transition. Exemple:
System.out.println(ZoneId.of("Africa/Accra").getRules()
.getTransition(LocalDateTime.of(1920, 9, 1, 00, 10)));
Production:
Transition[Gap at 1920-09-01T00:00Z to +00:20]
Vous pouvez obtenir toutes les informations que vous voulez (début, fin, décalage avant, après compensation, écart / recouvrement , etc.) de l' ZoneOffsetTransition
objet.