Mettre en forme ZonedDateTime en chaîne

1. Vue d'ensemble

Dans ce rapide tutoriel, nous verrons comment convertir un ZonedDateTime en String.

Nous verrons également comment analyser un ZonedDateTime à partir d'une chaîne.

2. Création d'un ZonedDateTime

Tout d'abord, nous allons commencer par un ZonedDateTime avec un fuseau horaire UTC. Nous pouvons y parvenir de plusieurs manières.

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 un ZonedDateTime à partir de la date et de l'heure actuelles:

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

Ou, nous pouvons créer un ZonedDateTime à partir d'un LocalDateTime existant :

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

3. ZonedDateTime en chaîne

Maintenant, convertissons notre ZonedDateTime en String. Pour cela, nous utiliserons la classe DateTimeFormatter .

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ée ici, mais nous examinerons quelques-uns des plus courants.

Si nous voulons afficher le décalage du fuseau horaire, nous pouvons utiliser le formateur «Z» ou «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. Chaîne à ZonedDateTime

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

Une option pour ce faire est d'utiliser la méthode static parse () de la classe ZonedDateTime :

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

Cette méthode utilise le formateur ISO_ZONED_DATE_TIME . Il existe également une version surchargée de la méthode qui prend un paramètre DateTimeFormatter . 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 un ZonedDateTime à partir d'une String implique 2 étapes: convertir la String en LocalDateTime, puis cet objet en 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-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 article plus détaillé sur l'analyse des dates.

5. Conclusion

Dans cet article, nous avons vu comment créer un ZonedDateTime et comment le formater en tant que chaîne.

Nous avons également examiné rapidement comment analyser une chaîne de date et d'heure et la convertir en ZonedDateTime .

Le code source de ce didacticiel est disponible à l'adresse over sur Github.