Comment obtenir de l'UTC+0 date dans Java 8?
J'ai des problèmes avec la Date de classe en Java. Classe Date renvoie la machine locale date mais j'ai besoin de UTC-0.
J'ai googlé et trouvé une grande solution pour le JavaScript, mais pour Java rien d'utile.
Comment obtenir de l'UTC+0 date dans Java 8?
java.util.Date
n'est jamais une machine locale date. Il est toujours définie comme écoulé millisecs depuis 1970-01-01 par rapport à UTC+00:00. Peut-être que le comportement de sa méthodetoString()
vous trouble qui, en effet, utiliser une représentation dans le fuseau horaire local.- Une probable réponse peut être trouvée dans la question: stackoverflow.com/questions/45350095/...
Vous devez vous connecter pour publier un commentaire.
Avec Java 8, vous pouvez écrire:
Pour répondre à votre commentaire, vous pouvez convertir une Date (sauf si vous comptez sur l'héritage de code je ne vois pas pourquoi) ou à millis depuis les époques:
OffsetDateTime
plutôt queZonedDateTime
étant donné que nous travaillons avec un simple décalage-de-UTC, plutôt qu'à temps plein de la zone?tl;dr
java.temps
Le gênants vieille date-heure classes livré avec les premières versions de Java ont été supplanté par le java.le temps classes intégré dans Java 8 et les versions ultérieures. Voir Oracle Tutoriel. Une grande partie de la fonctionnalité a été porté à Java 6 & 7 dans ThreeTen-Backport et plus adapté à Android dans ThreeTenABP.
Instant
Un
Instantané
représente un moment dans le scénario de UTC avec une résolution de jusqu'à nanosecondes.La
toString
méthode génère une Chaîne de caractères de l'objet avec le texte représentant la date-valeur du temps à l'aide de l'un de la norme ISO 8601 formats.La
Instant
classe est une construction de base-bloc de la classe en java.temps. Cela devrait être votre go-classe lors de la manipulation de date-heure comme, en général, la meilleure pratique est de suivre, d'enregistrer et de la date de l'échange valeurs de temps en temps UTC.OffsetDateTime
Mais
Instant
a des limites comme aucune des options de formatage pour générer des chaînes dans d'autres formats. Pour plus de flexibilité, de convertir à partir deInstant
àOffsetDateTime
. Spécifier un offset-de-UTC. En java.en temps que signifie l'Écartfuseau
objet. Ici, nous voulons coller avec l'UTC (+00), donc on peut utiliser le pratique constanteÉcartfuseau.UTC
.Ou d'ignorer le
Instant
classe.Maintenant avec un
OffsetDateTime
objet dans la main, vous pouvez utiliserDateTimeFormatter
pour créer des objets de Chaîne de texte dans d'autres formats. Recherche de Débordement de Pile pour de nombreux exemples de l'utilisation deDateTimeFormatter
.ZonedDateTime
Lorsque vous souhaitez afficher horloge murale pour certains fuseau horaire particulier, appliquer un
ZoneId
pour obtenir unZonedDateTime
.Dans cet exemple, nous appliquons Montréal fuseau horaire. En été, sous Heure d'été (DST) non-sens, la zone a un décalage de
-04:00
. Donc, notez comment le temps de la journée est de quatre heures plus tôt dans la sortie,15
au lieu de19
heures.Instant
et laZonedDateTime
les deux représentent la même simultanée moment, juste vu au travers de deux objectifs différents.Conversion
Alors que vous devriez éviter de l'ancienne date-classes de temps, si vous devez vous pouvez convertir à l'aide de nouvelles méthodes ajoutées aux anciennes classes. Ici, nous utilisons
java.util.Date.à partir de( Instantanée )
etjava.util.Date: toInstant
.Et va dans le sens d'autres.
De même, à chercher de nouvelles méthodes ajoutée à
GregorianCalendar
(sous-classe deCalendar
) pour convertirjava.time.ZonedDateTime
.Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Dans Java8 vous utiliser la nouvelle API du Temps, et de convertir une Instant dans un ZonedDateTime à l'Aide de la Le Fuseau horaire UTC
Dans java8, je voudrais utiliser le
Instant
classe qui est déjà dans UTC et est commode de travailler avec.Alternativement, vous pouvez utiliser les éléments suivants:
Retour à
Instant
Instant
est pas à l'heure locale. UnInstant
, par définition, est en UTC. Donc, pas besoin de les machinations vu dans cette Réponse, en essayant d'entrer dans l'UTC; laInstant
déjà est en UTC. Voir ma Réponse pour plus d'info et un code bien plus simple.