Formatiert ZonedDateTime in String

Formatieren Sie ZonedDateTime in String

1. Überblick

In diesem kurzen Tutorial erfahren Sie, wie Sie einZonedDateTime in einString. konvertieren

Wir werden uns auch ansehen, wie einZonedDateTime von einemString. analysiert wird

2. ZonedDateTime erstellen

Zunächst beginnen wir mit einemZonedDateTime 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 einZonedDateTime aus dem aktuellen Datum und der aktuellen Uhrzeit erstellen:

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

Oder wir können einZonedDateTime aus einem vorhandenenLocalDateTime erstellen:

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

3. ZonedDateTime bisString

Konvertieren wir nun unsereZonedDateTime inString.. Dazuwe’ll use the DateTimeFormatter class.

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

Wenn wirto display the time zone offset, we can use the Formatierer“Z” or “X” wollen:

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

Dies würde uns zu folgendem Ergebnis führen:

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 bisZonedDateTime

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

Eine Möglichkeit hierfür ist die Verwendung vonstatic parse() method of the ZonedDateTime class:

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

Diese Methode verwendet den FormatiererISO_ZONED_DATE_TIME. Es gibt auch eine überladene Version der Methode, die einenDateTimeFormatter-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 Option, um einZonedDateTime aus einemString zu erhalten, umfasst zwei Schritte: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));

Diese indirekte Methode kombiniert einfach die Datums- und Uhrzeitangabe 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 unserer ausführlicheren Analyse von Datumsangaben inarticle.

5. Fazit

In diesem Artikel haben wir gesehen, wie SieZonedDateTime erstellen und alsString. formatieren

Wir haben uns auch kurz angesehen, wie eine Datums- / Zeitzeichenfolge analysiert und inZonedDateTime konvertiert wird.

Der Quellcode für dieses Tutorial istover on Github verfügbar.