Formatieren Sie ZonedDateTime in String

1. Übersicht

In diesem kurzen Tutorial erfahren Sie , wie Sie eine ZonedDateTime in einen String konvertieren .

Wir werden uns auch ansehen, wie eine ZonedDateTime aus einem String analysiert wird .

2. Erstellen einer ZonedDateTime

Zuerst beginnen wir mit einer ZonedDateTime mit einer Zeitzone von UTC. Es gibt verschiedene Möglichkeiten, dies zu erreichen.

Wir können das Jahr, den Monat, den Tag usw. angeben:

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

Wir können auch eine ZonedDateTime aus dem aktuellen Datum und der aktuellen Uhrzeit erstellen :

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

Oder wir können eine ZonedDateTime aus einer vorhandenen LocalDateTime erstellen :

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

3. ZonedDateTime to String

Lassen Sie uns nun unsere ZonedDateTime in einen String konvertieren . Dazu verwenden wir die DateTimeFormatter- Klasse.

Es gibt einige spezielle Formatierer, mit denen wir Zeitzonendaten anzeigen können. Die vollständige Liste der Formatierer finden Sie hier, aber wir werden uns einige der gebräuchlichsten ansehen.

Wenn wir den Zeitzonenversatz anzeigen möchten , können wir den Formatierer "Z" oder "X" verwenden :

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

Dies würde uns ein Ergebnis wie dieses geben:

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

Um den Zeitzonennamen einzuschließen, können wir ein Kleinbuchstaben "z" verwenden:

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

Die Ausgabe davon wäre:

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

4. String zu ZonedDateTime

Dieser Vorgang kann auch umgekehrt ablaufen. Wir können einen String nehmen und ihn wieder in eine ZonedDateTime konvertieren .

Eine Möglichkeit hierfür ist die Verwendung der statischen parse () -Methode der ZonedDateTime- Klasse:

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

Diese Methode verwendet den Formatierer ISO_ZONED_DATE_TIME . Es gibt auch eine überladene Version der Methode, die einen DateTimeFormatter- Parameter verwendet. Der String muss jedoch eine Zonenkennung enthalten, sonst wird eine Ausnahme angezeigt:

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

Eine zweite Möglichkeit , eine erhalten ZonedDateTime aus einem String beinhaltet 2 Schritte: Umwandeln die Zeichenfolge in einem Local, dann für dieses Objekt zu einem 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));

Diese indirekte Methode kombiniert einfach Datum und Uhrzeit mit einer Zonen-ID:

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

Weitere Informationen zum Parsen von Zeichenfolgen auf Datumsangaben finden Sie in unserem ausführlicheren Artikel zum Parsen von Datumsangaben.

5. Schlussfolgerung

In diesem Artikel haben wir gesehen, wie Sie eine ZonedDateTime erstellen und als Zeichenfolge formatieren .

Wir haben auch einen kurzen Blick darauf geworfen, wie eine Datums- / Zeitzeichenfolge analysiert und in eine ZonedDateTime konvertiert wird .

Der Quellcode für dieses Tutorial ist auf Github verfügbar.