Mengonversi Antara LocalDate dan XMLGregorianCalendar

1. Ikhtisar

Dalam tutorial singkat ini, kita akan membahas LocalDate dan XMLGregorianCalendar dan memberikan contoh konversi antara kedua jenis tersebut.

2. XMLGregorianCalendar

Standar Skema XML mendefinisikan aturan yang jelas untuk menentukan tanggal dalam format XML. Untuk menggunakan format ini, kelas Java XMLGregorianCalendar, yang diperkenalkan di Java 1.5, adalah representasi dari tipe data tanggal / waktu W3C XML Schema 1.0.

3. LocalDate

Sebuah LOCALDATE misalnya merupakan date tanpa zona waktu dalam sistem kalender ISO-8601. Hasilnya, LocalDate , misalnya, cocok untuk menyimpan hari ulang tahun tetapi tidak terkait dengan waktu. Java memperkenalkan LocalDate di versi 1.8.

4. Dari LocalDate ke XMLGregorianCalendar

Pertama, kita akan melihat cara mengonversi dari LocalDate ke XMLGregorianCalendar . Untuk menghasilkan instance baru XMLGregorianCalendar , kami menggunakan DataTypeFactory dari paket javax.xml.datatype .

Jadi, mari buat instance LocalDate dan ubah menjadi 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 disebutkan sebelumnya, instance XMLGregorianCalendar memiliki kemungkinan memiliki informasi zona waktu. Namun, LocalDate tidak memiliki informasi tentang waktu.

Oleh karena itu, saat kami melakukan konversi, nilai zona waktu akan tetap sebagai FIELD_UNDEFINED .

5. Dari XMLGregorianCalendar ke LocalDate

Demikian juga, sekarang kita akan melihat bagaimana melakukan konversi dengan cara sebaliknya. Ternyata, mengonversi dari XMLGregorianCalendar ke LocalDate jauh lebih mudah.

Sekali lagi, karena LocalDate tidak memiliki informasi tentang waktu, instance LocalDate hanya dapat berisi subset informasi XMLGregorianCalendar .

Mari buat instance XMLGregorianCalendar dan lakukan konversi:

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

Dalam tutorial ini cepat, kita telah membahas transformasi antara LOCALDATE contoh dan XMLGregorianCalendar , dan sebaliknya.

Dan, seperti biasa, kode sampel tersedia di GitHub.