Problema
Como ajustar o horário de verão no Timezone do Java?
A JVM do Java possui um Timezone próprio diferente do Timezone do sistema operacional. Assim, o horário de verão brasileiro pode ser um problema para as aplicações Java. Pode acontecer que S.O. entenda que já é horário de verão e o Java não, dessa forma o computador terá um horário enquanto a aplicação Java estará em outro.
Isso ocorre pois o horário de verão brasileiro até 2007 era definido por decreto. Somente em 2008 foram criadas regras claras para seu inicio e fim – inicia sempre no terceiro domingo de outubro e termina também no terceiro domingo de Fevereiro, se coincidir com o Carnaval, prorroga-se por mais uma semana. Além disso, apenas algumas regiões do Brasil é que possuem essa regra – Sul, Sudeste, Centro-Oeste e em 2011 teve a inclusão do estado da Bahia (Nordeste), mas atualmente não têm usado o horário de verão.
As possíveis causas são:
- Nas opções do relógio no S.O., o fuso horário não está marcado como UTC-2 (Brasília).
- Nas opções regionais e idiomas não está configurado que o PC encontra-se no Brasil.
- O Java está desatualizado.
No primeiro e no segundo caso não teremos problemas em si com o horário de verão, porém as aplicações Java poderão retornar um horário errado.
O terceiro caso é o mais comum, pode ser que esteja a rodar uma versão do Java de 2007, assim o Timezone do Java não saberá que, por exemplo, em 2011 o horário de verão iniciou-se dia 16 de outubro. Para resolver esse problema basta fazer o download da versão mais recente do Java.
É recomendável a desinstalação completa da versão antiga.
Solução/Procedimento
Configurando o Timezone no Java:
Pode existir casos onde queira que a aplicação rode com um Timezone diferenciado, por exemplo, um servidor em Manaus executando uma aplicação Java para usuários localizados em São Paulo, ou casos, onde mesmo corrigindo os três casos supracitados, o S.O. por algum motivo “desconhecido”, continua retornando um Timezone “errado”. Então, para setar o Timezone, basta adicionar o seguinte parâmetro no .conf do serviço em “Java Options”:
-Duser.timezone=America/Sao_Paulo
Se preferir, o UTC pode também ser configurado manualmente:
-Duser.timezone=GMT-2
Nesse exemplo, foi usado o GMT-2 simulando um horário de verão, na qual a regra é adicionar uma hora a mais no dia, como o fuso horário padrão de Brasília é -3, fica assim: três horas negativas mais uma hora positiva, igual a menos duas horas. Em outras palavras, quando o Brasil estiver no horário de verão, será GMT-2.
Para alterar as opções regionais da JVM, use os comandos a seguir:
-Duser.language=pt
-Duser.country=BR
Referência
Sem referências