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
DATETIMEom een LocalDateTime. op te slaan en eenVARCHAReen tijdzone opslaan zoals"Europe/Paris"of eenSMALLINTeen offset in minuten opslaan. - Converteer de
ZonedDateTimenaar eenStringen sla op in eenVARCHARkolom zoals"2017-05-16T14:12:48.983682+01:00[Europe/London]". U moet het dan ontleden wanneer u uit de database leest.