Horodatage
étend Date
pour fournir une précision à la nanoseconde. Ni Date
ni Timestamp
sont conçus pour faire référence à un fuseau horaire spécifique en tant que ZoneDateTime
.
Si vous devez convertir ZonedDateTime
-> Timestamp
vous devrez supprimer les informations de fuseau horaire/décalage. Par exemple
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));
et pour convertir Timestamp
-> ZonedDateTime
vous devez spécifier un décalage :
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));
ou fuseau horaire :
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));
Si votre intention est d'enregistrer ZonedDateTime
variables dans la base de données et préserver les différents fuseaux horaires qui y sont spécifiés, je vous recommande de concevoir votre base de données en conséquence. Suggestions :
- Utiliser une colonne de type
DATETIME
pour enregistrer unLocalDateTime
et unVARCHAR
enregistrer un fuseau horaire comme"Europe/Paris"
ou unSMALLINT
enregistrement d'un décalage en minutes. - Convertir le
ZonedDateTime
à uneString
et enregistrez dans unVARCHAR
colonne comme"2017-05-16T14:12:48.983682+01:00[Europe/London]"
. Vous devrez ensuite l'analyser lors de la lecture à partir de la base de données.