Java + Mysql - Problema com horário de verão

8 respostas Resolvido
javamysql
S

Boa tarde!

Nosso sistema web rodando no wildfly com mysql teve um problema no envio dos pedidos por conta do horário de verão.

Os pedidos terima que ser enviados na segunda 17/10/2016 na primeira hora (00:00:00) por uma rotina automática.

Porém os pedidos com data de envio para 16/10/2016 foram enviados de sábado para domingo. Como se a data de envio (16) fosse menor que a data do sistema, tb (16).

Não sei se domingo 00:00:00 o SQL fez o cálculo em milisegundos e o horário de verão confundio-o.
O mais estranho é que na query apenas é considerado a data por meio da função DATE, portanto desconsiderando o horário.

Na função que definiu a data e hora do envio, 0,0,0 passou a ser 1,0,0, isto é, foi considerado 01 hr como hora inicial do dia 16.

Alguém me ajude (rs) por favor…

8 Respostas

P

existe uma razão para existir timezones.

sem olhar como esta configurada a sua aplicação e o banco de dados. mas vai alguns conselhos:

  1. sempre salve em UTC
  2. verifique qual o timezone do banco de dados

https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

eu nao sei como vc especificou a data, nem que tipo de erros o pulo do horario de verão pode ter acarretado, mas se vc pula uma hora entre sabado e domingo isso é estranho ter afetado coisas do dia 16. nao consigo ver o efeito do pulo do horario.

mostra algum codigo pra gente entender

S

Muito obrigado pela resposta.

Esse pulo do horário de 00 para 01 acho que é feito quando converto de LocalDateTime para java.util.Date para ser persistido no BD.

O timezone do meu db é BRT.

Não achei uma causa lógica verificável, mas se foi convertido 2016-10-16 00:00:00 para 2016-10-16 01:00:00, também poderia ser 2016-10-16 00:00:00 para 2016-10-15 ou algo assim.

Mas não consegui recriar essa situação.

S

Tem certeza de que ninguém alterou a hora do sistema sem querer?
Já vi muitas pessoas desatenciosas adiantarem o relógio da máquina ao invés de ligar a opção do horário de verão.
Não deve adiantar o horário, se o sistema não tiver opção de horário de verão, você pode mudar o timezone pra GMT-2, por exemplo, e aí, quando o horário de verão terminar, voltar pro timezone GMT-3.

C
Solucao aceita

Olá,

Como @peczenyj citou, mas em mais detalhes: http://stackoverflow.com/questions/2532729/daylight-saving-time-and-time-zone-best-practices

C

Olá,

E também a infomação abaixo se estiver usando JSF 2.0 ou superior: http://stackoverflow.com/questions/7490954/set-a-default-time-zone-for-fconvertdatetime

Tradução: se o relógio do servidor for configurado corretamente para o horário de verão então a sua aplicação JSF 2.0 ou superior sempre exibirá a data e hora corretas.

Em verdade, foi essa questão do Stack Overflow que me indicou as melhores práticas de horário de verão e timezones.

P

em geral são as pessoas que não conhecem NTP ( network time protocol )

S

Muito obrigado a todos!

Vou verificar cada informação dada e chegar a uma conclusão. Embora ainda não tenha conseguido identificar o que realmente aconteceu.

Nossa hospedagem é na Integrator, que tem um serviço razoável mas o suporte é precário.

Por isso já penso em mudar para uma arquitetura Cloud PaaS na qual poderei ter mais controle (e mais trabalho tb).

Vlw!

S

@sidronio, eu tinha um blog hospedado na Integrator mas depois desisti pois achava caro pagar pouco mais de 20 R$ por mês pra manter um blog.

Hoje mantenho ele hospedado no Google mesmo, como a página tem pouco acesso, raramente eu pago hospedagem, o mais caro que paguei foi U$0,20 (vinte centavos de dólar).

Dá uma olhada se não resolve o problema de vocês: https://cloud.google.com

Criado 18 de outubro de 2016
Ultima resposta 19 de out. de 2016
Respostas 8
Participantes 4