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:- Use uma coluna do tipo
DATETIMEpara salvar umLocalDateTimee umVARCHARsalvar um fuso horário como"Europe/Paris"ou umSMALLINTsalvando um deslocamento em minutos. - Converter o
ZonedDateTimepara umaStringe salve em umVARCHARcoluna como"2017-05-16T14:12:48.983682+01:00[Europe/London]". Você terá que analisá-lo ao ler do banco de dados.