Pretvaranje između LocalDate i XMLGregorianCalendar
1. Pregled
U ovom ćemo brzom vodiču razgovarati LocalDate i XMLGregorianCalendar i pružiti primjere konverzije između dvije vrste.
2. XMLGregorianCalendar
Standard XML sheme definira jasna pravila za određivanje datuma u XML formatu. Da bi se koristio ovaj format, Java klasa XMLGregorianCalendar, predstavljen u Javi 1.5 predstavlja prikaz tipova podataka datuma i vremena W3C XML Schema 1.0.
3. LocalDate
A LocalDate instanca predstavlja datum bez vremenske zone u kalendarskom sustavu ISO-8601. Kao rezultat, LocalDate je, na primjer, prikladno za pohranu rođendana, ali ne i ništa povezano s vremenom. Uvedena Java LocalDate u verziji 1.8.
4. Od LocalDate do XMLGregorianCalendar
Prvo ćemo vidjeti kako pretvoriti iz LocalDate do XMLGregorianCalendar. Da bi se generirala nova instanca XMLGregorianCalendar, koristimo a DataTypeFactory od javax.xml.datatype paket.
Pa, kreirajmo instancu LocalDate i pretvoriti ga u 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);
Kao što je prethodno napomenuto, an XMLGregorianCalendar instanca ima mogućnost dobivanja podataka o vremenskoj zoni. Međutim, LocalDate nema podataka o vremenu.
Stoga, kada izvršimo pretvorbu, vrijednost vremenske zone ostat će kao FIELD_UNDEFINED.
5. Od XMLGregorianCalendar do LocalDate
Isto tako, sada ćemo vidjeti kako izvršiti pretvorbu obrnuto. Kako se ispostavilo, pretvaranje iz a XMLGregorianCalendar do LocalDate je puno lakše.
Opet, od LocalDate nema informacije o vremenu, a LocalDate instanca može sadržavati samo podskup XMLGregorianCalendar informacija.
Stvorimo instancu XMLGregorianCalendar i izvršite pretvorbu:
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. Zaključak
U ovom smo brzom vodiču pokrili transformacije između LocalDate instance i XMLGregorianCalendar, i obrnuto.
Kao i uvijek, uzorak koda dostupan je na GitHubu.