Tijdstempel
verlengt Date
om nanoseconden nauwkeurigheid te bieden. Geen van beide Date
noch Timestamp
zijn ontworpen om naar een specifieke tijdzone te verwijzen als ZoneDateTime
.
Als u ZonedDateTime
. moet converteren -> Timestamp
u zult de tijdzone/offset-informatie moeten weggooien. Bijv.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
en voor het converteren van Timestamp
-> ZonedDateTime
je moet een offset specificeren:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
of tijdzone:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Als het uw bedoeling is om ZonedDateTime
. op te slaan variabelen in de database en behoud de verschillende tijdzones die daar zijn gespecificeerd, raad ik aan om uw database dienovereenkomstig te ontwerpen. Suggesties:
- Gebruik een kolom van het type
DATETIME
om een LocalDateTime
. op te slaan en eenVARCHAR
een tijdzone opslaan zoals"Europe/Paris"
of eenSMALLINT
een offset in minuten opslaan. - Converteer de
ZonedDateTime
naar eenString
en sla op in eenVARCHAR
kolom zoals"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. U moet het dan ontleden wanneer u uit de database leest.