2
respostas

Problema de Time Zone no MySQL

Esses dias eu tive um problema pra rodar o Hibernate, pois dava um problema de timezone. Eu corrigi fazendo um "SET @global.time_zone = '+3:00';". Consegui fazer o Hibernate rodar, mas agora o horário tá muito errado. Fiz um insert no banco de dados às 18:34 e ele registrou como 23:34. Tem algum jeito de arrumar isso?

2 respostas

Oi Pércio

Você pode usar o Java 8 ZonedDateTime para obter a data em UTC:

ZonedDateTime.now(ZoneOffset.UTC);

Dessa forma, você vai persistir sua data com "timezone 0"

E para converter a data usando um timezone qualquer:

public static ZonedDateTime getDateinTimeZone(String timeZone, String dateInSting) {
    return ZonedDateTime.parse(dateInString).now(ZoneId.of(timeZone));
}

Além disso, você pode colocar na sua aplicação qual é o timezone a ser considerado:

HibernateUtil.getSessionFactory().withOptions()
  .jdbcTimeZone(TimeZone.getTimeZone("UTC"))
  .openSession();

Obrigado pela resposta, Otávio.

Infelizmente não funcionou, eu continuo com a hora errada. Testei mudando apenas o LocalDateTime pela ZonedDateTime, com a configuração que eu havia feito da hora anteriormente, e tanto com uma instalação limpa do MySQL. Inseri agora as 22:47 e a hora registrada foi 03:47. Será que eu fiz alguma coisa errada pra usar a ZonedDateTime?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software