Solution facile :
System.out.println(OffsetDateTime.now(ZoneId.of("America/Panama")).toString());
Je viens d'obtenir ce résultat :
2018-04-30T02:12:46.442185-05:00
Pour contrôler que les secondes sont toujours imprimées avec exactement trois décimales :
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSXXX");
OffsetDateTime now = OffsetDateTime.now(ZoneId.of("America/Panama"));
System.out.println(now.format(formatter));
2018-04-30T02:12:46.442-05:00
La première, la version facile, imprimera suffisamment de groupes de trois décimales pour rendre la précision totale. Elle omettra aussi complètement les secondes si elles sont égales à 0,0. Les deux versions sont probablement correctes, car tout cela est autorisé par le format ISO 8601 que vous avez demandé. La personne qui reçoit la chaîne devrait donc être satisfaite de toute façon.
Veuillez indiquer le fuseau horaire souhaité. J'ai utilisé l'Amérique/Panama. Il est préférable de donner un fuseau horaire explicite pour un résultat prévisible.
J'utilise et je recommande java.time
l'API moderne de date et d'heure de Java. Le site SimpleDateFormat
que vous avez utilisé est non seulement dépassé depuis longtemps, mais il est aussi notoirement problématique. java.time
est tellement plus agréable à travailler.
Que signifie -05:00 ?
-05:00
est un décalage par rapport à UTC (ou GMT, c'est presque la même chose). Ainsi, la chaîne de caractères de votre exemple provient probablement du fuseau horaire oriental de l'Amérique du Nord ou d'un autre endroit d'Amérique centrale ou du Sud (Cuba, Bolivie, pour n'en citer que quelques-uns qui utilisent ce décalage pendant une partie de l'année). Plus précisément -05:00
signifie que nous utilisons une horloge qui a 5 heures (et 0 minute) de retard sur UTC. Donc 2:12:46-05:00 indique le même moment que 7:12:46 UTC. Si nous savions seulement que l'heure est 2:12:46 et que nous ne connaissions pas le fuseau horaire ou le décalage, ce serait très ambigu. Un décalage est parfait pour transformer l'heure en un point dans le temps sans ambiguïté.
Liens