Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Date Format decrementando um dia ao converter

Bom dia Pessoal,

Preciso de uma ajuda para o seguinte problema:

No meu banco de dados eu tenho a coluna data de nascimento do tipo Date, e ao inserir um candidato, eu pego a String CndNascimento do POST e converto para o formato do Mysql, até aí tudo bem, a data 01/02/1990 vira 1990-02-01 certinho.

Quando vou trazer esses dados para a resposta da API, ao fazer o convert desse Date para String, ele decrementa um dia sem motivo aparente, ex.: 1990-06-12 vira 1990-06-11.

Já virei a internet e nada resolve, ja tentei simpleDateFormat, Date, formatter, nada resolve.

Preciso de ajuda para ajustar isso, segue abaixo meu metodo de inserção;

public String inserir(CandidatoForm candidatoForm) throws ParseException {
        final Candidato candidato = candidatoRepository.findByNomeCandidato(candidatoForm.getCndNome(),
                candidatoForm.getCndSobrenome());
        if (candidato == null) {
            final Candidato candidatoInsert = new Candidato();
            candidatoInsert.setCndNome(candidatoForm.getCndNome());
            candidatoInsert.setCndSobrenome(candidatoForm.getCndSobrenome());
            candidatoInsert.setCndNascimento(DataUtil.dateToSqlDate(candidatoForm.getCndNascimento()));
            candidatoInsert.setCndCpf(candidatoForm.getCndCpf());
            candidatoInsert.setCndRg(candidatoForm.getCndRg());
            candidatoInsert.setCndLogradouro(candidatoForm.getCndLogradouro());
            candidatoInsert.setCndBairro(candidatoForm.getCndBairro());
            candidatoInsert.setCndCep(candidatoForm.getCndCep());
            candidatoInsert.setCndNumero(candidatoForm.getCndNumero());
            candidatoInsert.setCndComplemento(candidatoForm.getCndComplemento());
            candidatoInsert.setCndFone1(candidatoForm.getCndFone1());
            candidatoInsert.setCndFone2(candidatoForm.getCndFone2());
            candidatoInsert.setCndAtivo(candidatoForm.getCndAtivo());
            candidatoInsert.setEstado(estadoService.buscarPorId(candidatoForm.getEstado()));
            candidatoInsert.setCidade(cidadeService.buscarPorId(candidatoForm.getCidade()));
            candidatoRepository.save(candidatoInsert);
            return "Inserido";
        } else {
            return "Não Inserido";
        }
    }

E agora meu método de conversão:

public static String dateToString(Date data) {
        DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        dateFormat.setTimeZone(TimeZone.getTimeZone("America/Sao_Paulo"));
        String strDate = dateFormat.format(data);

        return strDate;

    }

Se eu trago a data no retorno da API mantendo o tipo Date(java.util) ele traz a data da seguinte maneira:

{
  "nascimento": "1990-06-27T00:00:00.000+0000",
}

Sendo a data correta mas com essa informação de tempo desnecessária para mim.

Agradeço a todos e qualquer informação extra posso ir passando :)

2 respostas
solução!

Resolvido após muitas tentativas falhas, mudando o tipo da coluna de Date para DateTime no MySQL.

Que bom que conseguiu resolver o seu problema, Luiz! E obrigado por compartilhar conosco a solução! Assim todos crescemos juntos! Continue assim!

Grande abraço e bons estudos, meu aluno!