Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

LocalDateTime , ZonedDateTime e carimbo de data/hora


Timestamp estende Date para fornecer precisão de nanossegundos. Nem Date nem Timestamp são projetados para se referir a um fuso horário específico como ZoneDateTime .

Se você precisar converter ZonedDateTime -> Timestamp você terá que descartar as informações de fuso horário/deslocamento. Por exemplo.
LocalDateTime withoutTimezone = zoneDateTime.toLocalDateTime();
Timestamp timestamp = Timestamp.valueOf(withoutTimezone));

e para converter Timestamp -> ZonedDateTime você precisa especificar um deslocamento:
LocalDateTime withoutTimezone = sqlTimestamp.toLocalDateTime();
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("+03:00"));

ou fuso horário:
ZonedDateTime withTimezone = withoutTimezone.atZone(ZoneId.of("Europe/Paris"));

Se sua intenção é salvar ZonedDateTime variáveis ​​no banco de dados e preservar os vários fusos horários especificados lá, recomendo projetar seu banco de dados de acordo. Sugestões:
  1. Use uma coluna do tipo DATETIME para salvar um LocalDateTime e um VARCHAR salvar um fuso horário como "Europe/Paris" ou um SMALLINT salvando um deslocamento em minutos.
  2. Converter o ZonedDateTime para uma String e salve em um VARCHAR coluna como "2017-05-16T14:12:48.983682+01:00[Europe/London]" . Você terá que analisá-lo ao ler do banco de dados.