O Horário de verão foi extinto em 2019 no brasil, e como causa diversas aplicações tiveram o impacto de adiantar uma hora e alterar o timezone de acordo com o antigo horário de verão.
A imagem a seguir demonstra o horário de verão em todas as regiões do Brasil.
Note que São Paulo possui UTC-2 em horário de verão, e UTC-3 em horário normal. Um dos problemas que acaba surgindo é que as aplicações Java tem um mecanismo de DST (Daylight Saving Time) próprio.
O Daylight Saving Time muda muito frequentemente pelo mundo, e não há nenhuma autoridade central que coordena as mudanças. Atualmente, sempre que existe uma mudança, ela é registrada no IANA TIMEZONE DATABASE. Em seguida, a próxima atualização do JRE do Java conterá as atualizações realizadas.
O processo a seguir serve para agilizar o processo e fazer as aplicações Java começarem a retornar as datas em formato correto:
Passo 1
Primeiramente iremos acessar o site https://www.iana.org/time-zones e realizar o download do arquivo tar.gz (382.9kb) Data Only Distribution.
Passo 2
Em sequencia iremos acessar o site https://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html e realizar o download da ferramenta da Oracle que permite realizar o ajuste dos horários.
Passo 3
Em seguida, no Windows, baixar o 7-Zip pelo seguinte Link: https://www.7-zip.org/download.html. Iremos editar os dados fornecidos pelo Database de Timezones do Iana.
Passo 4
Logo em seguida, iremos abrir o arquivo southamerica presente no arquivo tzdata2019c.tar.gz.
Passo 5
Iremos acessar a Zone America/Sao_Paulo. (Atual linha 1034). A estrutura é a seguinte:
Portanto, ela possui o seguinte formato: ZONE, NAME, STDOFF, RULES, FORMAT, [UNTIL].
Um exemplo de atualização que pode ser utilizada:
Foram realizadas mais algumas modificações nas seguintes linhas:
Iremos atualizar também os outros estados que necessitam de modificações (basta verificar alguns estados abaixo do de São Paulo). Não se deve realizar nenhuma alteração seguindo a risca as regras propostas pela IANA.
Passo 6
Agora, iremos utilizar a ferramenta da Oracle, que é um arquivo .jar. Iremos executar o seguinte comando:
java -jar tzupdater.jar -f -l file:///home/caminho/tzdata.tar.gz
O arquivo tzdata.tar.gz deve conter o arquivo southamerica atualizado.
Após a execução, devemos ter o seguinte retorno:
Using file:///home/caminho/tzupdater/tzdata/tzdata.tar.gz as source for tzdata bundle.
Passo 7
Em seguida, na instancia da AWS iremos reiniciar o ambiente.
Quando o ambiente for reinicializado, iremos checar as alterações a partir do exemplo de código a seguir:
ZoneId fusoHorarioDeSaoPaulo = ZoneId.of(“America/Sao_Paulo”);
ZonedDateTime agoraEmSaoPaulo = ZonedDateTime.now(fusoHorarioDeSaoPaulo);
System.out.println(agoraEmSaoPaulo); //2019–10–21T10:02:57.838–03:00[America/Sao_Paulo]
Passo 8
Em conclusão, tudo deve estar funcionando corretamente! É uma alteração as pressas visando remediar a situação.
Portanto até a próxima atualização do JRE, este é um mecanismo que iremos utilizar para resolver o problema com urgência.
A seguir, para acessar mais conteúdos como esse, clique aqui.