Mengubah Tanggal Java ke OffsetDateTime

1. Perkenalan

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

2. Perbedaan Antara Date dan OffsetDateTime

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

OffsetDateTime adalah kelas aman untuk benang yang menyimpan tanggal dan waktu dengan presisi nanodetik. Tanggal , di sisi lain, tidak aman untuk thread dan menyimpan waktu hingga presisi milidetik.

OffsetDateTime adalah kelas berbasis nilai, yang berarti bahwa kita perlu menggunakan sama ketika membandingkan referensi, bukan tipikal ==.

Output dari OffsetDateTime 's toString metode dalam ISO-8601 Format, sementara Tanggal ' s toString dalam format kustom non-standar.

Mari panggil toString di kedua kelas untuk melihat perbedaannya:

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

Tanggal tidak dapat menyimpan zona waktu dan offset yang sesuai. Satu-satunya isi objek Tanggal adalah jumlah milidetik sejak 1 Januari 1970, 00:00:00 UTC, jadi jika waktu kita tidak dalam UTC, kita harus menyimpan zona waktu di kelas pembantu. Sebaliknya, OffsetDateTime menyimpan ZoneOffset secara internal.

3. Mengubah Tanggal ke OffsetDateTime

Mengubah Tanggal menjadi OffsetDateTime cukup sederhana. Jika Tanggal kita dalam UTC, kita dapat mengubahnya dengan satu ekspresi:

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

Jika Tanggal asli tidak dalam UTC, kami dapat menyediakan offset (disimpan dalam objek pembantu, karena seperti yang disebutkan sebelumnya, kelas Tanggal tidak dapat menyimpan zona waktu).

Katakanlah Tanggal asli kami adalah +3: 30 (waktu Teheran):

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

OffsetDateTime menyediakan banyak metode berguna yang dapat digunakan sesudahnya. Misalnya, kita cukup getDayOfWeek () , getDayOfMonth () , dan getDayOfYear (). Juga sangat mudah untuk membandingkan dua objek OffsetDateTime dengan metode isAfter dan isBefore .

Yang terpenting, merupakan praktik yang baik untuk menghindari kelas Date yang tidak digunakan lagi sepenuhnya.

4. Kesimpulan

Dalam tutorial ini, kita belajar betapa sederhananya untuk mengonversi dari Date ke OffsetDateTime .

Dan, seperti biasa, kode tersedia di Github.