Omzetten tussen LocalDate en XMLGregorianCalendar

1. Overzicht

In deze korte tutorial bespreken we LocalDate en XMLGregorianCalendar en geef voorbeelden van het omzetten tussen de twee typen.

2. XMLGregorianCalendar

De XML Schema-standaard definieert duidelijke regels voor het specificeren van datums in XML-indeling. Om dit formaat te gebruiken, moet de Java-class XMLGregorianCalendar, geïntroduceerd in Java 1.5, is een weergave van de W3C XML Schema 1.0 datum / tijd datatypes.

3. LocalDate

EEN LocalDate instantie vertegenwoordigt een datum zonder tijdzone in het ISO-8601 kalendersysteem. Als resultaat, LocalDate is bijvoorbeeld geschikt voor het opslaan van verjaardagen, maar heeft niets met tijd te maken. Java geïntroduceerd LocalDate in versie 1.8.

4. Van LocalDate naar XMLGregorianCalendar

Eerst zullen we zien hoe u kunt converteren van LocalDate naar XMLGregorianCalendar. Om een ​​nieuw exemplaar van XMLGregorianCalendargebruiken we een DataTypeFactory van de javax.xml.datatype pakket.

Laten we dus een instantie maken van LocalDate en converteer het naar 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); 

Zoals eerder opgemerkt, een XMLGregorianCalendar instantie heeft de mogelijkheid om tijdzone-informatie te hebben. Echter, LocalDate heeft geen informatie over tijd.

Daarom, wanneer we de conversie uitvoeren, de waarde van de tijdzone blijft FIELD_UNDEFINED.

5. Van XMLGregorianCalendar naar LocalDate

Evenzo zullen we nu zien hoe we de conversie andersom kunnen uitvoeren. Het blijkt dat het converteren van een XMLGregorianCalendar naar LocalDate is veel gemakkelijker.

Nogmaals, sinds LocalDate heeft geen informatie over tijd, a LocalDate instantie kan alleen een subset van de XMLGregorianCalendar informatie.

Laten we een instantie maken van XMLGregorianCalendar en voer de conversie uit:

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. Conclusie

In deze korte tutorial hebben we de transformaties tussen LocalDate instanties en XMLGregorianCalendar, en vice versa.

En, zoals altijd, is de voorbeeldcode beschikbaar op GitHub.