Comment obtenir l'écart DST et le chevauchement?

user2923322:

ZonedDateTimene 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 ofprocé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?

Sweeper:

Je ne pense pas qu'il est physiquement possible de créer un ZonedDateTimequi est dans une transition de l' écart, car les temps de date locale qu'une transition gap saute sont techniquement « inexistante », et ZonedDateTimeest 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 LocalDateTimes, pas ZonedDateTimes.

ZoneRulesa cette méthode très pratique appelée getTransitionqui prend LocalDateTimeet vous donne un ZoneOffsetTransition, ce qui représente une transition écart / chevauchement, ou nullsi 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' ZoneOffsetTransitionobjet.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=478582&siteId=1
conseillé
Classement