Convertir LocalDateTime à LocalDateTime en UTC
Convertir LocalDateTime à LocalDateTime en UTC.
LocalDateTime convertToUtc(LocalDateTime date) {
//do conversion
}
J'ai cherché sur net. Mais n'ont pas une solution
- Avez-vous trouver la javadoc de LocalDateTime? Il dit: "Cette classe ne pas stocker ou de représenter un fuseau horaire. Au lieu de cela, il est une description de la date, comme celui utilisé pour les anniversaires, combiné avec l'heure locale, comme on le voit sur une horloge murale. Il ne peut pas représenter un instant sur la ligne sans informations supplémentaires, telles que le décalage de temps ou de zone."
- Votre question n'a pas de sens -, vous devez expliquer le contexte de cette méthode et de ce que vous essayez d'atteindre. Il semble que vous avez une incompréhension fondamentale de ce que les diverses classes de l'API représentent.
- Si vous vous souciez de fuseaux horaires, vous devez utiliser ZonedDateTime, qui a des méthodes de conversion entre les fuseaux horaires withZoneSameLocal() et withZoneSameInstant()
- Ya. J'ai compris. Merci
Vous devez vous connecter pour publier un commentaire.
Il y a une façon plus simple
Personnellement, je préfère
que c'est la plus lisible option.
LocalDateTime ne contient pas d'informations de Zone. ZonedDatetime n'.
Si vous voulez convertir LocalDateTime à l'UTC, vous devez envelopper par ZonedDateTime poing.
Vous pouvez convertir comme ci-dessous.
ldt.atZone(ZoneId.systemDefault()).withZoneSameInstant(ZoneId.of("UTC"))
bien que concis nous communique un sens suffisamment pour ne pas avoir besoin de zonage variable d'instance.ZoneOffset.UTC
est un remplacement gentil pourZoneId.of("UTC")
OffsetDateTime
est plus approprié queZonedDateTime
. Utilisation:OffsetDateTime.now( ZoneOffset.UTC )
oumyInstant.atOffset( ZoneOffset.UTC )
Utilisation ci-dessous. Il prend le datetime local et le convertit à l'UTC à l'aide du fuseau horaire. Vous n'avez pas besoin de créer de la fonction.
Si vous avez besoin pour obtenir le LocalDateTime partie de la ZonedDateTime alors vous pouvez utiliser ce qui suit.
Ici est une méthode statique-je utiliser dans mon application pour insérer l'heure UTC dans mysql depuis je ne peux pas ajouter une valeur par défaut UTC_TIMESTAMP à une colonne datetime.
Voici une simple petite classe utilitaire que vous pouvez utiliser pour convertir la date locales de fois à partir d'une zone à l'autre, y compris une méthode utilitaire directement à convertir une date du temps de la zone actuelle à l'UTC (avec la méthode principale de sorte que vous pouvez l'exécuter et de voir les résultats d'un test simple):
tldr: il n'y a simplement aucun moyen de le faire; si vous essayez de faire cela, vous obtenez LocalDateTime mal.
La raison en est que LocalDateTime n'enregistre pas de Temps Horaire, après des instances sont créées. Vous ne pouvez pas convertir une date en temps sans temps zone à une autre date heure en fonction du fuseau horaire.
Comme une question de fait, LocalDateTime.maintenant() ne doit jamais être appelée dans le code de production, sauf si votre but est d'obtenir des résultats aléatoires. Lorsque vous construisez un LocalDateTime exemple comme ça, cette instance comprend la date de l'heure SEULEMENT, sur la base actuelle du fuseau horaire du serveur, ce qui signifie que ce bout de code va générer des résultats différents si elle est en cours d'exécution sur un serveur avec un fuseau horaire différent de config.
LocalDateTime peut simplifier la date de calcul. Si vous voulez un vrai universellement utilisable des données de temps, utilisez ZonedDateTime ou OffsetDateTime: https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html.
Question?
En regardant les réponses et la question, il semble que la question a été modifiée de manière significative. Donc, pour répondre à la question en cours:
Fuseau horaire?
LocalDateTime
ne stockons pas d'informations sur le fuseau horaire, il est juste fondamentalement détient les valeurs de l'année, mois, jour, heure, minute, deuxième, et de plus petites unités. Donc, une question importante est: Quel est le fuseau horaire de l'originalLocalDateTime
? Il pourrait aussi bien être UTC déjà, donc aucune conversion n'est effectuée.Système De Fuseau Horaire Par Défaut
Considérant que vous avez posé la question, de toute façon, vous avez probablement dire qu'à l'origine, le temps est dans votre système fuseau horaire par défaut et que vous souhaitez les convertir au format UTC. Parce que, habituellement un
LocalDateTime
objet est créé à l'aide deLocalDateTime.now()
qui renvoie l'heure actuelle dans le système de fuseau horaire par défaut. Dans ce cas, la conversion devrait être le suivant:Un exemple du processus de conversion:
Explicite Fuseau Horaire
Dans tous les autres cas, lorsque vous spécifiez explicitement le fuseau horaire de l'heure à convertir, la conversion serait la suivante:
Un exemple du processus de conversion:
La
atZone()
MéthodeLe résultat de la
atZone()
de la méthode dépend du temps passé en argument, car elle tient compte de toutes les règles de la zone horaire, y compris l'Heure d'été (DST). Dans les exemples, le temps était le 25 février, en Europe, cela signifie que le temps de l'hiver (pas de DST).Si nous devions utiliser une date différente, disons 25 août de l'année dernière, le résultat serait différent, compte tenu de l'heure d'été:
De l'heure GMT ne change pas. Par conséquent, les décalages dans les autres fuseaux horaires sont ajustés. Dans cet exemple, la période estivale de l'Estonie est GMT+3, et à l'heure d'hiver (GMT+2.
Aussi, si vous indiquez un temps dans la transition de l'évolution des horloges d'une heure. E. g. 28 octobre 2018 03:30 pour l'Estonie, cela peut vouloir dire deux fois:
Sans spécifier le décalage manuellement (GMT+2 GMT+3), le temps
03:30
pour le fuseau horaireEurope/Tallinn
peut vouloir dire deux temps UTC, et deux positions différentes.Résumé
Comme vous pouvez le voir, le résultat final dépend du fuseau horaire de l'heure passée en argument. Parce que le fuseau horaire ne peut être extraite à partir de la
LocalDateTime
objet, vous devez savoir vous-même fuseau horaire, il est à venir afin de le convertir au format UTC.format.format(dt);
}
SimpleDateFormat
classe. Au moins, pas comme la première option. Et pas sans réserve. Aujourd'hui, nous avons tellement mieux enjava.time
, le moderne Java date et l'heure de l'API et sonDateTimeFormatter
.vous pouvez mettre en œuvre un helper faire quelque chose comme ça :