Format ZonedDateTime ke String

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat cara mengonversi ZonedDateTime menjadi String.

Kami juga akan melihat cara mengurai ZonedDateTime dari String.

2. Membuat ZonedDateTime

Pertama, kita akan mulai dengan ZonedDateTime dengan zona waktu UTC. Ada beberapa cara untuk melakukannya.

Kami dapat menentukan tahun, bulan, hari, dll:

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

Kami juga dapat membuat ZonedDateTime dari tanggal dan waktu saat ini:

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

Atau, kita dapat membuat ZonedDateTime dari yang ada LocalDateTime :

LocalDateTime localDateTime = LocalDateTime.now(); ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));

3. ZonedDateTime ke String

Sekarang, mari kita ubah ZonedDateTime menjadi String. Untuk ini, kami akan menggunakan kelas DateTimeFormatter .

Ada beberapa format khusus yang dapat kita gunakan untuk menampilkan data zona waktu. Daftar lengkap pemformat dapat ditemukan di sini, tetapi kita akan melihat beberapa pemformat yang lebih umum.

Jika kita ingin menampilkan offset zona waktu, kita dapat menggunakan formatter “Z” atau “X” :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z"); String formattedString = zonedDateTime.format(formatter);

Ini akan memberi kita hasil seperti ini:

02/01/2018 - 13:45:30 +0000

Untuk memasukkan nama zona waktu, kita dapat menggunakan huruf kecil "z":

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z"); String formattedString2 = zonedDateTime.format(formatter2);

Outputnya adalah:

02/01/2018 - 13:45:30 UTC

4. String ke ZonedDateTime

Proses ini juga bisa bekerja secara terbalik. Kita dapat mengambil string dan mengubahnya kembali menjadi ZonedDateTime .

Salah satu pilihan untuk melakukan ini adalah dengan menggunakan static parse () method dari ZonedDateTime kelas:

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

Metode ini menggunakan pemformat ISO_ZONED_DATE_TIME . Ada juga versi metode kelebihan beban yang menggunakan parameter DateTimeFormatter . Namun, String harus berisi pengenal zona atau kami akan mendapatkan pengecualian:

assertThrows(DateTimeParseException.class, () -> ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME));

Opsi kedua untuk mendapatkan ZonedDateTime dari String melibatkan 2 langkah: mengubah String menjadi LocalDateTime, lalu objek ini menjadi ZonedDateTime:

ZoneId timeZone = ZoneId.systemDefault(); ZonedDateTime zonedDateTime = LocalDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO_DATE_TIME).atZone(timeZone); log.info(zonedDateTime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME));

Metode tidak langsung ini hanya menggabungkan tanggal-waktu dengan id zona:

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]

Untuk mempelajari lebih lanjut tentang penguraian String ke tanggal, lihat artikel penguraian tanggal yang lebih mendalam.

5. Kesimpulan

Di artikel ini, kita telah melihat cara membuat ZonedDateTime , dan cara memformatnya sebagai String.

Kami juga telah melihat sekilas cara mengurai string waktu tanggal dan mengubahnya menjadi ZonedDateTime .

Kode sumber untuk tutorial ini tersedia di Github.