Mysql
 sql >> Base de données >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime et Horodatage

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 :

  1. Utiliser une colonne de type DATETIME pour enregistrer un LocalDateTime et un VARCHAR enregistrer un fuseau horaire comme "Europe/Paris" ou un SMALLINT enregistrement d'un décalage en minutes.
  2. Convertir le ZonedDateTime à une String et enregistrez dans un VARCHAR 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.