Format ZonedDateTime en chaîne

Formatez ZonedDateTime en chaîne

1. Vue d'ensemble

Dans ce rapide tutoriel, nous verrons comment convertir unZonedDateTime en unString.

Nous verrons également comment analyser unZonedDateTime à partir d'unString.

2. Créer unZonedDateTime

Tout d'abord, nous allons commencer par unZonedDateTime avec un fuseau horaire UTC. Nous pouvons y arriver de plusieurs façons.

Nous pouvons spécifier l'année, le mois, le jour, etc.:

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

Nous pouvons également créer unZonedDateTime à partir de la date et de l'heure actuelles:

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

Ou, nous pouvons créer unZonedDateTime à partir d'unLocalDateTime existant:

LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));

3. ZonedDateTime àString

Maintenant, convertissons nosZonedDateTime enString. Pour cela,we’ll use the DateTimeFormatter class.

Il existe quelques formateurs spéciaux que nous pouvons utiliser pour afficher les données de fuseau horaire. La liste complète des formateurs peut être trouvéehere, mais nous examinerons quelques-uns des plus courants.

Si nous voulons le formateurto display the time zone offset, we can use the“Z” or “X”:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
String formattedString = zonedDateTime.format(formatter);

Cela nous donnerait un résultat comme celui-ci:

02/01/2018 - 13:45:30 +0000

Pour inclure le nom du fuseau horaire, nous pouvons utiliser un «z» minuscule:

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z");
String formattedString2 = zonedDateTime.format(formatter2);

Le résultat de ceci serait:

02/01/2018 - 13:45:30 UTC

4. String àZonedDateTime

Ce processus peut également fonctionner en sens inverse. Nous pouvons prendre une chaîne et la reconvertir enZonedDateTime.

Une option pour ce faire est d'utiliser lesstatic parse() method of the ZonedDateTime class:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

Cette méthode utilise le formateurISO_ZONED_DATE_TIME. Il existe également une version surchargée de la méthode qui prend un paramètreDateTimeFormatter. Cependant, la chaîne doit contenir un identifiant de zone ou nous obtiendrons une exception:

assertThrows(DateTimeParseException.class, () ->
  ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));

Une deuxième option pour obtenir unZonedDateTime à partir d'unString implique 2 étapes:converting the String to a LocalDateTime, then this object to a ZonedDateTime:

ZoneId timeZone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = LocalDateTime.parse("2011-12-03T10:15:30",
  DateTimeFormatter.ISO_DATE_TIME).atZone(timeZone);

log.info(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));

Cette méthode indirecte combine simplement la date et l'heure avec un identifiant de zone:

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]

Pour en savoir plus sur l'analyse de String en dates, consultez notre analyse plus approfondie des datesarticle.

5. Conclusion

Dans cet article, nous avons vu comment créer unZonedDateTime et comment le formater enString.

Nous avons également examiné rapidement comment analyser une chaîne de date et heure et la convertir enZonedDateTime.

Le code source de ce didacticiel est disponibleover on Github.