Horário de verão 2009

Tive este ‘problema’ recorrente esta semana e aproveito pra deixar a dica aqui.

Caso seu programa esteja apresentando problemas referentes ao horário de verão de 2009, basta adicionar a seguinte linha na sua inicialização:

Timezone.setDefault(new SimpleTimeZone(TimeZone.getDefault()
			.getRawOffset(), "America/Sao_Paulo", Calendar.OCTOBER, 18, 0,
			3600000 * 1 + 60000 * 0, // 01h00
			Calendar.FEBRUARY, 20, 0, 3600000 * 2 + 60000 * 0, // 02h00
			3600000));

Isto fará com que o Timezone da maquina virtual fique de acordo como HBV de 2009.

Referencia: http://chester.blog.br/archives/2006/10/acertando_o_hor.html

Outra alternativa é passar o parâmetro abaixo para a JVM

-Duser.timezone=GMT-03

Furutani,

esta opção leva em conta o inicio e final do horario de verao (GMT-02 no período específico)?

ah agora entendi
É que essa semana o relógio da jvm ficou doido, ai eu coloquei esse parametro para poder corrigir. Mas ele não é inteligente como seu código.

Um adendo importante a esta informação:

Em sistemas WINDOWS, as configurações do relógio devem ser feitas de acordo com o horário de verão, ou seja, deve ser configurado o relógio do servidor para o horário ANTIGO e marcada a opção “Ajustar automaticamente para o horário de verão”.

Isto se deve ao fato de que, como a máquina virtual realiza esta convenção, caso o relógio do servidor simplesmente seja adiantado uma hora, a JVM considera que GMT-3 referência é de uma hora adiantada e que o horário de verão (na realidade GMT-3 + 1 hora) é de uma hora ainda a mais, adiantando o relógio da jvm em 2 horas.

Exemplo:
GMT-3 08:00:00 AM
Horário Brasileiro de Verão (GMT-3 + 1 hora): 09:00:00 AM

Exemplo na configuração INCORRETA:
Horário configurado no servidor: 09:00:00 AM (sem marcar ajuste automático, portanto, GMT-3)
aqui você está dizendo q a referência tem 1 hora a mais, o q nao é correto!
Horário exibido no servidor: 09:00:00 AM (GMT-3)
Horário da jvm: 10:00:00 AM - uma hora adiantado! (GMT-3 (incorretamente adiantado) + 1 hora)

Exemplo na configuração CORRETA:
Horário configurado no servidor: 08:00:00 AM (marcado ajuste automático, portanto, GMT-3)
a referência está correta!
Horário exibido no servidor: 09:00:00 AM (GMT-3 + 1 hora)
Horário da jvm: 09:00:00 AM - hora correta (GMT-3 + 1 hora)

Embora no primeiro caso o horário do servidor esteja sendo exibido corretamente, a referência está errada. Não foi GMT-3 que adiantou 1 hora (isso nao existe! Horário GMT nao muda NUNCA). A lei apenas define q seja adicionado um offset de +1 hora no horário de Brasília. O Brasil nao troca de fuso :slight_smile:

Vale lembrar que existem rotinas automatizadas que podem DESFAZER as configurações realizadas no relógio do Windows. Isto depende de scripts de inicialização e políticas de rede configuradas em cada ambiente. Após a modificação, fique atento se ela não é retornada após o primeiro boot ou após sincronismos automáticos de relógio definidos pela rede. Toda aplicação JAVA está sujeita a este tipo de problema. Entao mantenha sempre esta configuração correta para evitar problemas de relógio.