Olá, pessoal, quando eu passo como paramêtro uma data para o banco de dados MySQL, ele está diminuindo o dia em 1, exemplo:
c1.setDtNascimento("1991-12-23");
dao.add(c1);
Quando eu vou olhar no banco a data está 1991-12-22.
E se eu der um:
System.out.println(c1.getDtNascimento);
Ele retorna a data correta (1991-12-23);
c1.getDtNascimento retorna um objeto do tipo Date.
Segue como está no DAO:
stmt.setDate(4, contato.getDtNascimento());
Segue método setDtNascimento da classe Contato:
public void setDtNascimento(String YYYYMMDD){
dtNascimento = Date.valueOf(YYYYMMDD);
}
Alguém tem alguma idéia do queu pode estar acontecendo? rs
Obrigado.
Com essas informações que você providenciou, a primeira coisa que eu olharia é a timezone do banco de dados. Qual o tipo de dado que você usou na data de nascimento, no banco de dados? Qual a timezone do banco?
BlackHeartH, aconselho vc modificar o atributo dtNascimento para “Date” ao invés de usar como “String”.
Em sua classe DAO, setar/preparar o valor do atributo na String da query da seguinte maneira:
stmt.setDate(4, new java.sql.Date(contato.getDtNascimento().getTime());
O banco de dados não reconhece de modo coerente o Date do pacote “Util” do Java, por esse motivo há a necessidade de usar a classe Date do pacote “Sql” do Java para que o banco consiga armazenar o valor do atributo corretamente.
Obrigado pelas respostas pessoal, infelizmente eu retirei o MySQL(instalei o Oracle, pois quero aprender ele) e atualizei o Eclipse para a versão Oxygen, pois estava com alguns problemas de resolução no Linux com a versão Neon.
Refiz as classes e deu certo, a única mudança que fiz, foi mais ou menos o que o @gui.oliveira92 falou. Eu deixei para receber como parâmetro um objeto Date, deixei o título do método assim:
public void setBirthday(Date date);
Quando eu passo o paramêtro eu utilizado o método “of” da classe Date:
java.sql.Date.of(“1991-12-21”); – Que aceita uma String como argumento e retorna um Date.
O que salvou no banco foi “91-DEC-21”, depois eu tento mudar isso.