Stempel waktu
memperpanjang Date
untuk memberikan akurasi nanodetik. Baik Date
atau Timestamp
dirancang untuk merujuk ke zona waktu tertentu sebagai ZoneDateTime
.
Jika Anda perlu mengonversi ZonedDateTime
-> Timestamp
Anda harus membuang informasi zona waktu/offset. Mis.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
dan untuk mengonversi Timestamp
-> ZonedDateTime
anda perlu menentukan offset:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
atau zona waktu:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Jika niat Anda adalah untuk menyimpan ZonedDateTime
variabel dalam database dan mempertahankan berbagai zona waktu yang ditentukan di sana, saya sarankan merancang database Anda sesuai. Saran:
- Gunakan kolom dengan tipe
DATETIME
untuk menyimpanLocalDateTime
danVARCHAR
menyimpan zona waktu seperti"Europe/Paris"
atauSMALLINT
menghemat offset dalam hitungan menit. - Konversi
ZonedDateTime
keString
dan simpan dalamVARCHAR
kolom seperti"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. Anda kemudian harus menguraikannya saat membaca dari database.