Retorno de data um dia atrasado. MySQL

Ola,
estou salvando uma data no banco de dados, porém ela retorna com um dia de diferença (pra menos)
No banco salva certo, porém apenas no retorno dela, há esse problema.
Estou usando o Data do Java.util. Usando JPA.

@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
@NotNull(message= "Data de vencimento é obrigatório")
private Date dataVencimento;

Quais informações posso passar pra vocês, para que possam me ajuda?
Quando eu dou um print na data que mandei salvar, esta indo assim:
Thu Nov 21 00:00:00 BRST 2019

Porem, queria que fosse apenas a data, assim 2019-11-21 (padrão data do mysql)

No mysql tem essas informações.

SELECT @@global.time_zone;
±-------------------+
| @@global.time_zone |
±-------------------+
| -03:00 |
±-------------------+

SELECT @@session.time_zone;
±--------------------+
| @@session.time_zone |
±--------------------+
| -03:00 |
±--------------------+

PS: Percebi que o log do meu eclipse esta com 1 hora adiantado. Porém meu sistema esta com o horário certo, e esta desativado as atualizações automáticas no sistema.

Sim e está correto.
Você precisa converter a data para um formato legível, como String

SimpleDateFormat sdf = new SimpĺesDateFormat("yyyy-MM-dd");
System.out.println(sdf.format(aDataQueVeioDoBanco); //2019-11-21

Sacou?

Não Darlan, não é esse o problema, a formatação da data ja ta sendo feita. O problema esta sendo quando retorno a data do banco de dados… No getDataVencimento() ja esta vindo assim 2019-11-20
e era pra vir 2019-11-21

@Sergiojunior_Lhp bom dia, teria como postar o codigo do getDataVencimento

Abraços
Max

é um get normal

public Date getDataVencimento() {
	return dataVencimento;
}

Bom dia, cara não sei ao certo mais essa projeto é web?

é sim Mario.

Cara já vi um problema desse tipo. Como tá seu componente onde passa a data? ta assim:

Ex: <f:convertDateTime pattern=“dd/MM/yyyy” timeZone=“GMT-3”/>

Parâmetro pode resolver o caso, pra garante pode até usar mais um o locale=“pt”

na inicialização da aplicação, estou definindo o Locale

@Bean
public LocaleResolver localResolver() {
	return new FixedLocaleResolver(new Locale("pt", "BR"));
}

Mas então Mario, quando eu pego do Banco de Dados, ela sai de lá na data certa, porém ja chega com a data errada no get. Saca? o problema esta entre a saída da data no banco de dados e ao chegar na aplicação.

Java sempre foi problemático com datas. Pode tentar uma das soluções abaixo:

Tzupdater:

Ou marretar na aplicação (não recomendado, pois se o horário de verão voltar pode ser que de m).

    System.setProperty("user.timezone", "GMT-3:00");
    TimeZone.setDefault(null);

Fora isso não sei o que pode ser.

Ja tentei esse Tzupdater, não adiantou rsrs
Também tentei forçar o time.zone, sem sucesso. Ja desisti rsrs
Na verdade, to achando que o problema é na minha maquina, assim que puder, vou tentar em outro equipamento.
Se alguém quiser, e/ou puder testar, esta no meu git
https://github.com/sergio1910/cadastro-cobranca

tive um problema como esse, a solução foi usar LocalDate. Eu estava pegando strings e criando um date delas, e sempre retornava um dia a menos.

Tenta atualizar o driver!

Eu estava hoje com o mesmo problema. Depois de quebrar a cabeça o dia todo eu atualizei o driver do banco de dados e funcionou.

1 curtida

Muito obrigado cara, a tempos eu tenho esse tipo de problema em toda aplicação que desenvolvo, e sempre corrigi ela no braço, mas sempre desconfiei que não era natural ser chato mexer com data assim usando java + mysql, vendo a sua resposta atualizei para a versão 8.0.21, antes eu estava na 8.0.18, agora tudo funciona perfeitamente, vlw.

boa tarde, sou autodidata em java mas não conheço muita coisa. Estou com o mesmo problema que você descreveu no link. Você informou que atualizou a versão para 8.0.21. Não sei dizer qual é a minha versão e nem como faço para atualizar. Você pode me dar uma dica sobre isso ??
Agradeço

Olá, no meu caso eu uso o maven como gerenciador de dependências, por isso no meu projeto tem um arquivo chamado pom.xml, neste arquivo eu defino as versões das bibliotecas que estou usando, na ultima vez que gerei um projeto pelo spring boot ele colocou a versão mysql padrão dele, que na época tinha este bug, então eu abri o pom.xml e coloquei a versão 8.0.21 editando o pom.xml. Você esta usando maven?