Konvertering mellem LocalDate og XMLGregorianCalendar

1. Oversigt

I denne hurtige vejledning diskuterer vi LocalDate og XMLGregorianCalendar og give eksempler på konvertering mellem de to typer.

2. XMLGregorianCalendar

XML Schema-standarden definerer klare regler til angivelse af datoer i XML-format. For at kunne bruge dette format, Java-klassen XMLGregorianCalendar, introduceret i Java 1.5, er en repræsentation af W3C XML Schema 1.0 dato / tid datatyper.

3. LocalDate

EN LocalDate instans repræsenterer en dato uden en tidszone i ISO-8601 kalendersystemet. Som resultat, LocalDate er for eksempel velegnet til opbevaring af fødselsdage, men ikke noget relateret til tid. Java introduceret LocalDate i version 1.8.

4. Fra LocalDate til XMLGregorianCalendar

Først ser vi, hvordan vi konverterer fra LocalDate til XMLGregorianCalendar. For at generere en ny forekomst af XMLGregorianCalendar, vi bruger en DataTypeFactory fra javax.xml.datatype pakke.

Så lad os oprette en forekomst af LocalDate og konverter det til 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); 

Som tidligere nævnt er en XMLGregorianCalendar instans har muligheden for at have tidszoneoplysninger. Imidlertid, LocalDate har ingen oplysninger om tid.

Derfor, når vi udfører konverteringen, tidszonsværdien forbliver som FIELD_UNDEFINED.

5. Fra XMLGregorianCalendar til LocalDate

På samme måde vil vi nu se, hvordan man udfører konverteringen omvendt. Som det viser sig, konvertering fra en XMLGregorianCalendar til LocalDate er meget lettere.

Igen, siden LocalDate har ikke oplysninger om tid, a LocalDate forekomst kan kun indeholde en delmængde af XMLGregorianCalendar Information.

Lad os oprette en forekomst af XMLGregorianCalendar og udfør konverteringen:

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

6. Konklusion

I denne hurtige vejledning har vi dækket transformationerne imellem LocalDate tilfælde og XMLGregorianCalendar, og omvendt.

Og som altid er prøvekoden tilgængelig på GitHub.