Pular para o conteúdo principal

Atualizando a lista de Timezone da JVM

Olá pessoal vamos falar sobre como atualizar a lista de Timezone da JVM.

O Problema da Mudança de Timezone


Devido uma mudança realizada pelo governo brasileiro, este ano não teremos o horário de verão, que mudava o GMT para -2 em algumas regiões do Pais, com isso, as configurações de Timezone dos servidores são ajustados para não realizar a mudança, mas alguns ambientes onde temos JVM podem acabar mudando e não seguindo o Timezone do S.O, pois a regra antiga ainda encontra-se configurada.

Ambiente Java 10 mudou com Timezone incorreto.

Acima instanciamos um objeto Date() a partir do JShell e notamos a diferença no horário, onde o correto seria exibir 11:05:31.


Lista de Timezone Atualizados


Como aconteceu aqui no Brasil, podem acontecer mudanças de Timezone em qualquer lugar (mesmo não sendo comum), quando ocorrem essas mudanças temos que recorrer a listas de Timezone atualizadas para que os ambientes possam funcionar corretamente.

No caso da JVM, a Oracle mantém a lista de Timezone baseada na IANA.

Para corrigir o nosso problema iremos utilizar a seguinte URL: https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz, esta irá retornar a ultima lista atualizada de Timezones.

A Ferramenta TZUpdater


A Oracle disponibiliza uma ferramenta para atualizar a lista de Timezone chamada TZUpdater, esta é um arquivo jar que deve ser executado passando a lista de atualização como parâmetro.


Realizando a execução


Para executar o utilitário devemos executar o seguinte comando:

java -jar tzupdater.jar  -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz


Se tudo ocorrer corretamente o resultado será o seguinte:


Descritivo da execução do comando.

Obs: Vale lembrar que caso você tenha mais de uma JVM no ambiente, ao executar o comando java, a lista que será atualizada é a que for sua JAVA_HOME e estiver configurada em seu PATH, caso sua necessidade seja alterar de outras JVM, use o caminho absoluto, por exemplo: /opt/path_java/bin/java


Após a atualização vamos criar novamente um objeto Date:


Ambiente Java 10 com o Timezone correto.

Após a execução do tzupdater a lista foi alterada e o Timezone esta de acordo com as configurações Locais.

Referências


Comentários

  1. OLá boa tarde, meu caro achei aqui seu artigo e estou tentando fazer o procedimento, tenho uma aplicação java rodando no Tomcat 7 com Java 7 executei procedimento porém eu baixei o arquivo tzdata2020c.tar.gz
    mais ao executar recebo este retorno indicando que deu um problema
    java.version: 1.7.0_79
    tzupdater version 2.3.1-b02
    JRE tzdata version: tzdata2015a
    Downloaded file to C:\Users\ADMINI~1\AppData\Local\Temp\2\tz.tmp\tzdata.tar.gz
    tzupdater tool would update with tzdata version: tzdata2020c
    javazic: fatal error: can't open file: C:\Users\ADMINI~1\AppData\Local\Temp\2\tz.tmp\pacificnew

    saberias me dizer o que posso fazer? executei como administrador, sei que o java de minha aplicação já deveria ser outro mais infelizmente estou correndo para atualizar e dai deu este problema que começou no sabado e não consegui resolver.

    ResponderExcluir
    Respostas
    1. Então RL, você fez o download do TZUpdater ?
      Qual S.O você esta utilizando ?
      isso esta me parecendo erro com o arquivo tar.gz que você fez o download, tenta baixar ele manualmente, a executa o comando assim: java -jar tzupdater.jar -l tzdata-latest.tar.gz

      Excluir
    2. Olá Caio blz, cara obrigado pela resposta, e então o sistema operacional é Windows, primeiro eu executei aqui em uma maquina local com windows 7 , o arquivo tzupdater eu fiz o download do site ada Oracle tzupdater-2.3.1.zip descompactei ele e o outro tzdata2020c.tar.gz lá do iana.org, e eu baixei o arquivo diretamente, achei sites, blogs com o mesmo conteúdo seu refere-se ao problema no ano passado então o arquivo referido é o tzdata2019c.tar, eu não lembro o que ocorreu mais ano passado não tive problema com isto, fato no minimo curioso

      Excluir
    3. Atualização do ultimo comentário eu consegui o arquivo do ano passado
      tzdata2019c.tar.gz e com ele o processo foi concluido sem problema, porém não sei se com isto o problema de 2020 ira continuar , mais pelo menos mostra que o que ocorreu ocorreu por conta do arquivo tzdata2020c.tar.gz

      Excluir
    4. Ok entendi, como o erro aconteceu com o arquivo de 2020 algo com relação ao conteúdo dele deve estar diferente, basicamente a diferença entre os arquivos de 2019 e 2020 são atualizações de timezone que ocorreram nas regiões, por exemplo, mudança na regra de horário de verão, no caso do Brasil não tivemos alteração esse ano, então acredito que seu problema será corrigido, qualquer coisa posta aqui novamente.

      Excluir
    5. Corrigido, corrigido \o/ graças a Deus, ufa que a minha nova versão com java 9 num tá pronta ainda,

      Excluir
  2. Obrigado Caio, funcionou certinho!

    ResponderExcluir

Postar um comentário

Postagens mais visitadas do Blog