Menukar Tarikh Java ke OffsetDateTime

1. Pengenalan

Dalam tutorial ini, kita belajar tentang perbezaan antara Date dan OffsetDateTime . Kami juga belajar bagaimana menukar dari satu ke yang lain.

2. Perbezaan Antara Tarikh dan OffsetDateTime

OffsetDateTime diperkenalkan di JDK 8 sebagai alternatif moden untuk java.util.Date .

OffsetDateTime adalah kelas yang selamat untuk benang yang menyimpan tarikh dan masa dengan ketepatan nanodetik. Tarikh , sebaliknya, tidak selamat pada benang dan menyimpan masa hingga ketepatan milisaat.

OffsetDateTime adalah kelas berdasarkan nilai, yang bermaksud bahawa kita perlu menggunakan sama dengan membandingkan rujukan dan bukannya tipikal ==.

Output OffsetDateTime 's toString kaedah adalah dalam format ISO-8601, manakala Tarikh ' s toString dalam format adat tidak standard.

Mari panggilan toString di kedua-dua kelas untuk melihat perbezaan:

Date: Sat Oct 19 17:12:30 2019 OffsetDateTime: 2019-10-19T17:12:30.174Z

Tarikh tidak dapat menyimpan zon waktu dan ofset yang sepadan. Satu-satunya perkara yang mengandungi objek Date adalah bilangan milisaat sejak 1 Januari 1970, 00:00:00 UTC, jadi jika waktu kita tidak berada di UTC, kita harus menyimpan zon waktu di kelas pembantu. Sebaliknya, OffsetDateTime menyimpan ZoneOffset secara dalaman.

3. Menukar Tarikh ke OffsetDateTime

Menukar Tarikh ke OffsetDateTime cukup mudah. Sekiranya Tarikh kami di UTC, kami boleh menukarnya dengan satu ungkapan:

Date date = new Date(); OffsetDateTime offsetDateTime = date.toInstant() .atOffset(ZoneOffset.UTC);

Sekiranya Tarikh asal tidak ada di UTC, kami dapat memberikan ofset (disimpan dalam objek pembantu, kerana seperti yang disebutkan sebelumnya kelas Tarikh tidak dapat menyimpan zon waktu).

Katakan Tarikh asal kami ialah +3: 30 (waktu Tehran):

int hour = 3; int minute = 30; offsetDateTime = date.toInstant() .atOffset(ZoneOffset.ofHoursMinutes(hour, minute));

OffsetDateTime menyediakan banyak kaedah berguna yang boleh digunakan selepas itu. Sebagai contoh, kita hanya boleh mendapatkanDayOfWeek () , getDayOfMonth () , dan getDayOfYear (). Ia juga sangat mudah untuk membandingkan dua objek OffsetDateTime dengan kaedah isAfter dan isBefore .

Yang terpenting, adalah amalan yang baik untuk mengelakkan kelas Tarikh yang tidak digunakan lagi .

4. Kesimpulan

Dalam tutorial ini, kami mengetahui betapa mudahnya menukar dari Date to OffsetDateTime .

Dan, seperti biasa, kodnya tersedia di Github.