Timestamp
estende Date
per fornire una precisione di nanosecondi. Né Date
né Timestamp
sono progettati per fare riferimento a un fuso orario specifico come ZoneDateTime
.
Se devi convertire ZonedDateTime
-> Timestamp
dovrai scartare le informazioni sul fuso orario/offset. Es.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
e per convertire Timestamp
-> ZonedDateTime
devi specificare un offset:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
o fuso orario:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Se la tua intenzione è salvare ZonedDateTime
variabili nel database e preservare i vari fusi orari ivi specificati, consiglio di progettare il database di conseguenza. Suggerimenti:
- Utilizza una colonna di tipo
DATETIME
per salvare unLocalDateTime
e unVARCHAR
salvando un fuso orario come"Europe/Paris"
o unSMALLINT
salvando un offset in pochi minuti. - Convertire il
ZonedDateTime
a unaString
e salva in unVARCHAR
colonna come"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. Dovrai quindi analizzarlo durante la lettura dal database.