Olá! Estou gerando relatórios com 1 hora a mais no iReport em Java.
No ‘Text Field Expression:’ new java.util.Date()
E no Expression Class: java.lang.String
Alguém pode me auxiliar a resolver?
Obrigado
Olá! Estou gerando relatórios com 1 hora a mais no iReport em Java.
No ‘Text Field Expression:’ new java.util.Date()
E no Expression Class: java.lang.String
Alguém pode me auxiliar a resolver?
Obrigado
Que hora é no servidor? Está com horário de verão automático?
a hora no PC está correta, nos servidores de aplicação e BD também.
Tem algum timezone configurado no iReport?
Então não sei dizer. Onde fica esse time zone sabe me informar? É o iReport mais antigo versão: 5.0.4.
Os horários estão iguais, OK, mas os fusos estão iguais também?
Suspeito que há uma diferença de fuso horário entre sua máquina e seus servidores.
Não importa o horário do servidor, a JVM tem suas próprias configurações de fuso horário.
Faça um teste usando a mesma JVM que roda o Report, com a seguinte classe:
import java.util.TimeZone;
public class TesteTimeZone {
public static void main(String[] args) {
System.out.println(TimeZone.getDefault());
}
}
A saída será algo do tipo:
sun.util.calendar.ZoneInfo[id="America/Sao_Paulo",offset=-10800000,dstSavings=0,useDaylight=false,transitions=93,lastRule=null]
Meu palpite é que sua JVM esteja com as regras do horário de verão desatualizadas. Se aparecer ali no meio useDaylight=true
, meu palpite está certo
Aí bastaria atualizar a JVM, as versões mais novas já contém as regras atuais. Ou vc pode rodar o TZUpdater Tool, veja aqui um exemplo.
Não sei qual lugar posso rodar este código, a versão do iReport é a 5.0.4.
No prompt de comando, conforme o exemplo do link que o @hugokotsubo postou.
Em princípio o problema não é o iReport e sim sua versão do Java
O iReport roda em Java. Então na máquina onde ele roda tem um Java instalado.
Basta usar esse mesmo Java (na máquina em que ocorre o problema) pra rodar o teste que sugeri. Também é interessante rodar em outra máquina que não dá o problema, pra ver se dá diferença. Se meu palpite estiver certo, na que está com erro vai aparecer useDaylight=true
(indicando que a configuração da JVM está com horário de verão ativo, o que explicaria o problema), e na que funciona vai aparecer useDaylight=false
(que é o correto, já que neste ano não temos horário de verão).
Se for confirmado que o problema é a configuração do horário de verão, basta rodar o TzUpdater (ou atualizar a versão do Java) na máquina que está com problema, como já indicado.
Olá! Parece que o problema está relacionado ao fuso horário ou configurações de data do seu sistema. Uma solução seria ajustar o fuso horário no seu código Java para corresponder ao horário correto. Você pode fazer isso usando a classe Calendar
e o método setTimeZone
. Por exemplo:
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT-3")); // Ajuste o valor de acordo com o seu fuso horário
Date date = cal.getTime();
Verifique também se as configurações de fuso horário em seu sistema operacional estão corretas. Durante meu trabalho em processos internos para penalty shoot out robo, tive um problema semelhante e esta solução me ajudou.