Menukar Antara LocalDate dan XMLGregorianCalendar

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan membincangkan LocalDate dan XMLGregorianCalendar dan memberikan contoh penukaran antara dua jenis.

2. Kalendar XMLGregorian

Piawaian Skema XML menentukan peraturan yang jelas untuk menentukan tarikh dalam format XML. Untuk menggunakan format ini, kelas Java XMLGregorianCalendar, diperkenalkan di Java 1.5, merupakan representasi dari jenis data tarikh / waktu W3C XML Schema 1.0.

3. Tarikh Tempatan

Contoh LocalDate mewakili tarikh tanpa zon waktu dalam sistem kalendar ISO-8601. Hasilnya, LocalDate misalnya, sesuai untuk menyimpan ulang tahun kelahiran tetapi tidak berkaitan dengan masa. Java memperkenalkan LocalDate dalam versi 1.8.

4. Dari LocalDate hingga XMLGregorianCalendar

Pertama, kita akan melihat cara menukar dari LocalDate ke XMLGregorianCalendar . Untuk menghasilkan contoh baru XMLGregorianCalendar , kami menggunakan DataTypeFactory dari pakej javax.xml.datatype .

Oleh itu, mari kita buat contoh LocalDate dan menukarnya ke 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); 

Seperti yang dinyatakan sebelumnya, contoh XMLGregorianCalendar mempunyai kemungkinan mempunyai maklumat zon waktu. Walau bagaimanapun, LocalDate tidak mempunyai maklumat mengenai masa.

Oleh itu, apabila kita melakukan penukaran, nilai zon waktu akan tetap seperti FIELD_UNDEFINED .

5. Dari XMLGregorianCalendar hingga LocalDate

Begitu juga, kita sekarang akan melihat bagaimana melakukan penukaran sebaliknya. Ternyata, menukar dari XMLGregorianCalendar ke LocalDate jauh lebih mudah.

Sekali lagi, kerana LocalDate tidak mempunyai maklumat mengenai masa, contoh LocalDate hanya boleh mengandungi subset maklumat XMLGregorianCalendar .

Mari buat contoh XMLGregorianCalendar dan lakukan penukaran:

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

Dalam tutorial ini cepat, kami telah meliputi transformasi antara LOCALDATE keadaan dan XMLGregorianCalendar , dan sebaliknya.

Dan, seperti biasa, contoh kod tersedia di GitHub.