Format ZonedDateTime to String

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat cara menukar ZonedDateTime menjadi String.

Kami juga akan melihat bagaimana menguraikan ZonedDateTime dari String.

2. Membuat ZonedDateTime

Pertama, kita akan mulakan dengan ZonedDateTime dengan zon waktu UTC. Terdapat beberapa cara untuk mencapainya.

Kita dapat menentukan tahun, bulan, hari, dan lain-lain:

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

Kami juga boleh membuat ZonedDateTime dari tarikh dan masa semasa:

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

Atau, kita boleh membuat ZonedDateTime dari yang sedia ada LocalDateTime :

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

3. ZonedDateTime to String

Sekarang, mari kita menukar ZonedDateTime kami menjadi Rentetan. Untuk ini, kami akan menggunakan kelas DateTimeFormatter .

Terdapat beberapa formatters khas yang dapat kita gunakan untuk memaparkan data zon waktu. Senarai lengkap pemformat boleh didapati di sini, tetapi kami akan melihat beberapa yang lebih biasa.

Sekiranya kita ingin memaparkan zona waktu diimbangi, kita dapat menggunakan pemformat "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 zon waktu, kita dapat menggunakan huruf kecil "z":

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

Hasilnya adalah:

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

4. Rentetan ke ZonedDateTime

Proses ini juga boleh berlaku secara terbalik. Kita boleh mengambil rentetan dan mengubahnya kembali menjadi ZonedDateTime .

Salah satu pilihan untuk melakukan ini adalah dengan menggunakan statik hurai () kaedah yang ZonedDateTime kelas:

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

Kaedah ini menggunakan pemformat ISO_ZONED_DATE_TIME . Terdapat juga versi kaedah yang terlalu banyak yang mengambil parameter DateTimeFormatter . Walau bagaimanapun, String harus mengandungi pengecam zon atau kami akan mendapat pengecualian:

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

Pilihan kedua untuk mendapatkan ZonedDateTime dari String melibatkan 2 langkah: menukar String menjadi LocalDateTime, kemudian 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));

Kaedah tidak langsung ini hanya menggabungkan tarikh-waktu dengan id zon:

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

Untuk mengetahui lebih lanjut mengenai menguraikan rentetan tarikh, lihat artikel penghuraian tarikh yang lebih mendalam.

5. Kesimpulan

Dalam artikel ini, kami telah melihat cara membuat ZonedDateTime , dan cara memformatnya sebagai Rentetan.

Kami juga melihat dengan cepat bagaimana menguraikan rentetan tarikh dan menukar menjadi ZonedDateTime .

Kod sumber untuk tutorial ini terdapat di Github.