Konvertieren zwischen LocalDate und XMLGregorianCalendar

1. Übersicht

In diesem kurzen Tutorial werden LocalDate und XMLGregorianCalendar erläutert und Beispiele für die Konvertierung zwischen den beiden Typen bereitgestellt .

2. XMLGregorianCalendar

Der XML-Schema-Standard definiert klare Regeln für die Angabe von Daten im XML-Format. Um dieses Format zu verwenden, ist die in Java 1.5 eingeführte Java-Klasse XMLGregorianCalendar eine Darstellung der Datums- / Zeitdatentypen des W3C XML Schema 1.0.

3. LocalDate

Eine LocalDate- Instanz repräsentiert ein Datum ohne Zeitzone im ISO-8601-Kalendersystem. Daher eignet sich LocalDate beispielsweise zum Speichern von Geburtstagen, jedoch nicht für zeitbezogene Daten . Java hat LocalDate in Version 1.8 eingeführt.

4. Von LocalDate zu XMLGregorianCalendar

Zunächst erfahren Sie , wie Sie von LocalDate in XMLGregorianCalendar konvertieren . Um eine neue Instanz von XMLGregorianCalendar zu generieren , verwenden wir eine DataTypeFactory aus dem Paket javax.xml.datatype .

Erstellen wir also eine Instanz von LocalDate und konvertieren sie in XMLGregorianCalendar :

LocalDate localDate = LocalDate.of(2019, 4, 25); XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(localDate.toString()); assertThat(xmlGregorianCalendar.getYear()).isEqualTo(localDate.getYear()); assertThat(xmlGregorianCalendar.getMonth()).isEqualTo(localDate.getMonthValue()); assertThat(xmlGregorianCalendar.getDay()).isEqualTo(localDate.getDayOfMonth()); assertThat(xmlGregorianCalendar.getTimezone()).isEqualTo(DatatypeConstants.FIELD_UNDEFINED); 

Wie bereits erwähnt, kann eine XMLGregorianCalendar- Instanz Zeitzoneninformationen enthalten. Allerdings LOCALDATE keine Informationen über Zeit.

Wenn wir die Konvertierung durchführen, bleibt der Zeitzonenwert daher FIELD_UNDEFINED .

5. Von XMLGregorianCalendar zu LocalDate

Ebenso werden wir jetzt sehen, wie die Konvertierung umgekehrt durchgeführt wird. Wie sich herausstellt, ist die Konvertierung von einem XMLGregorianCalendar in LocalDate viel einfacher.

Da LocalDate keine Informationen zur Zeit enthält, kann eine LocalDate- Instanz nur eine Teilmenge der XMLGregorianCalendar- Informationen enthalten.

Erstellen wir eine Instanz von XMLGregorianCalendar und führen die Konvertierung durch:

XMLGregorianCalendar xmlGregorianCalendar = DatatypeFactory.newInstance().newXMLGregorianCalendar("2019-04-25"); LocalDate localDate = LocalDate.of( xmlGregorianCalendar.getYear(), xmlGregorianCalendar.getMonth(), xmlGregorianCalendar.getDay()); assertThat(localDate.getYear()).isEqualTo(xmlGregorianCalendar.getYear()); assertThat(localDate.getMonthValue()).isEqualTo(xmlGregorianCalendar.getMonth()); assertThat(localDate.getDayOfMonth()).isEqualTo(xmlGregorianCalendar.getDay()); 

6. Fazit

In diesem kurzen Tutorial haben wir die Transformationen zwischen LocalDate- Instanzen und XMLGregorianCalendar behandelt und umgekehrt.

Und wie immer ist der Beispielcode auf GitHub verfügbar.