Olá pessoal vamos falar sobre como atualizar a lista de Timezone da JVM.
Após a execução do tzupdater a lista foi alterada e o Timezone esta de acordo com as configurações Locais.
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.
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
ResponderExcluirmais 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.
Então RL, você fez o download do TZUpdater ?
ExcluirQual 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
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
ExcluirAtualização do ultimo comentário eu consegui o arquivo do ano passado
Excluirtzdata2019c.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
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.
ExcluirCorrigido, corrigido \o/ graças a Deus, ufa que a minha nova versão com java 9 num tá pronta ainda,
ExcluirObrigado Caio, funcionou certinho!
ResponderExcluir