Como eu aplico essa Propriedade staroski?
Desinstalei o java e reinstalei com a versão mais recente:
Java SE Development Kit 8u231
Funcionando perfeitamente
Obrigado pela ajuda de todos!
Como se aplica qualquer propriedade de sistema no Java: passando como argumento para a máquina virtual ao executar seu programa.
Resolveu meu problema. Executei esse comando dentro da pasta que está o programa e agora sempre o programa busca a hora certa (que está mostrando na barra do windows). Obrigado.
Prezados boa tarde,
Estou com o problema em que o Java ele atualizou o horario em 1 hora, embora tudo esteja correto com o servidor Windows como procurei saber isto ocorre mesmo e temos que executar o procedimento descrito porém estou obtendo a mensagem com erro no final
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
Estou executando com o prompt de comando como administrador e bem devido a versão do Java é uma questão da minha aplicação, estou já fazendo as mudanças para um java mais atualizado porém ainda tenho que correr muito até estar pronto
Alguém saberia resolver o caso?
Sei que o tópico já está resolvido há muito tempo, mas acho legal falar que isso não é a solução ideal (pode até “funcionar” durante boa parte do tempo, mas também pode falhar a qualquer momento).
Mas antes temos que entender um pouco sobre os timezones (fusos horários) e o horário de verão, e outras coisas relacionadas, como por exemplo o UTC.
UTC é o padrão a partir do qual todos os fusos horários do mundo se baseiam. É algo como “a hora zero”, ou “o horário base”, e todos os horários locais são definidos como uma diferença em relação a UTC - esta diferença é chamada de UTC offset, ou simplesmente offset.
Por exemplo, o Horário Oficial de Brasília possui offset -03:00
(ou seja, 3 horas a menos em relação a UTC). Porém, durante o horário de verão o offset muda para -02:00
(na prática, os relógios são adiantados em uma hora, mas o que na verdade ocorre, tecnicamente falando, é uma mudança de offset).
Todas essas mudanças de offset fazem parte de um identificador único. No caso do Horário de Brasília, este identificador é America/Sao_Paulo
, e ele possui todo o histórico de alterações de offset referentes à esta região (ou seja, todas as mudanças de horário de verão).
Todos os timezones e seus respectivos históricos fazem parte de um banco de dados público chamado TZDB (ou IANA Time Zone Database). No caso do Java, existe uma cópia do TZDB que já vem embutida na própria JVM, então quando você instala o Java, já tem uma versão deste banco de dados pronta para ser usada (e é dali que classes como SimpleDateFormat
e Calendar
lêem as informações para saber qual o horário atual, se está em horário de verão etc).
O problema é que timezones mudam o tempo todo (no caso do Brasil, até 2018 tinha horário de verão, a partir de 2019 não teve mais, etc - sem contar que a cada ano ele começava e terminava em um dia diferente). E como é algo definido pelo governo, nada garante que vai continuar assim para sempre (ou seja, nada garante que não possa voltar a ter horário de verão no futuro).
É por isso que usar um offset fixo como GMT-03:00
tem seus riscos. Pode funcionar muito bem hoje, amanhã, ano que vem. Mas basta o governo mudar de ideia e voltar com o horário de verão, para que sua aplicação comece a mostrar horários errados novamente (pois lembre-se, no horário de verão o offset muda para -02:00
, e se usar um offset fixo como GMT-03:00
, esta mudança não será aplicada - somente usando o timezone correto é que a mudança ocorre de forma “transparente” para a aplicação).
Sem contar que, se a aplicação for trabalhar com datas no passado, também pode dar errado: se a data no passado refere-se a um instante em que o horário de verão estava vigente, ao usar um offset fixo como -03:00
, será mostrado o horário errado (já que durante o horário de verão o offset é -02:00
).
A única forma de garantir que tudo vai estar certo é usar os identificadores de timezones (no formato “Continente/Região”, tal como America/Sao_Paulo
) e manter a JVM atualizada com a última versão do TZDB. Estas versões podem ser consultadas neste site, e você também pode assinar a lista de emails de announcements (que só envia emails sobre novas versões, então não vai encher sua caixa de email, veja no arquivo que não são muitas mensagens por ano).
Ou seja, o fluxo é mais ou menos assim:
- o governo muda as regras (vai ter - ou não vai ter - horário de verão, a data mudou, o offset vai ser outro, etc)
- a IANA fica ciente disso e lança uma nova versão do TZDB, contendo a nova regra
- você atualiza a sua JVM com a nova versão do TZDB, seja instalando uma nova versão do Java (que pode já vir com a nova versão do TZDB, consulte o release notes para ter certeza) ou rodando o tzupdater como já indicado nas mensagens anteriores (aliás, deve ser por isso que funcionou quando foi instalada uma nova versão do Java, ela já devia vir com o TZDB mais atual)
Usar um offset fixo, apesar de “funcionar” na maior parte do tempo, pode falhar a qualquer momento. E no caso do Brasil, as mudanças de horário de verão tradicionalmente acontecem na madrugada de sábado para domingo, que é um péssimo dia e horário para o sistema dar pau, não? Pense nisso
Obrigado por esclarecer isso. Vou seguir suas orientações. att