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
DATETIMEpour enregistrer unLocalDateTimeet unVARCHARenregistrer un fuseau horaire comme"Europe/Paris"ou unSMALLINTenregistrement d'un décalage en minutes. - Convertir le
ZonedDateTimeà uneStringet enregistrez dans unVARCHARcolonne 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.