J'essaie de formater un instantané en une chaîne en utilisant la nouvelle java 8 time-api et un modèle:
Instant instant = ...;
String out = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(instant);
En utilisant le code ci-dessus, j'obtiens une exception qui se plaint d'un champ non pris en charge:
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: YearOfEra
at java.time.Instant.getLong(Instant.java:608)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
...
yyyy-MM-dd hh:mm:ss
format:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss").withZone(ZoneId.of("Europe/Paris"));
la source
Cela vous évite d'avoir à convertir en UTC. Cependant, certains frameworks temporels d'autres langages peuvent ne pas prendre en charge les millisecondes, vous devriez donc faire
la source
La
Instant
classe ne contient pas d'informations sur la zone, elle stocke uniquement l'horodatage en millisecondes de l'époque UNIX, c'est-à-dire le 1er janvier 1070 de l'UTC. Ainsi, le formateur ne peut pas imprimer une date car la date est toujours imprimée pour le fuseau horaire concret. Vous devez définir le fuseau horaire sur le formateur et tout ira bien, comme ceci:la source
Ou si vous souhaitez toujours utiliser un formateur créé à partir d'un modèle, vous pouvez simplement utiliser LocalDateTime au lieu d'Instant:
la source
Les instances sont déjà en UTC et ont déjà un format de date par défaut aaaa-MM-jj . Si vous êtes satisfait de cela et que vous ne voulez pas jouer avec les fuseaux horaires ou le formatage, vous pouvez également le
toString()
faire:Vous ne voulez pas le T et le Z? (Z indique que cette date est UTC. Z signifie "Zulu" aka "Zero hour offset" aka UTC):
Vous voulez des millisecondes au lieu de nanosecondes? (Vous pouvez donc le placer dans une requête SQL):
etc.
la source
Je crois que cela pourrait aider, vous devrez peut-être utiliser une sorte de variation de la date locale au lieu de l'instantané
la source