Salva data mas mostra outra diferente do que foi salvo

Assim está na página WEB (mostrando somente a parte problemática):

// Data de nascimento no formato dd/MM/yyyy
String entrada = request.getParameter("nascimentoTxt");
java.util.Date data = new java.util.Date(entrada);
...
ps.setDate(2, new java.sql.Date(data.getTime()));
...

Aparentemente salva, mas na hora que tento exibir o valor, assim:

...
DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT);
...
<td><%=df.format(rs.getDate("nascimento"))%></td>

Ele me mostra uma data diferente da qual eu supostamente salvei. Exemplo:
Digitei no campo de texto: 30/11/1978 e “salvei”. Mas ele mostra: 11/06/1980

Alguém pode me ajudar a resolver esse problema? Onde está o erro?
Desde já agradeço.

Faz uma consulta no banco de dados para ver como está salvo.

Não sabia que o Date tem construtor no formato dd/MM/yyyy :stuck_out_tongue:

Vc precisa primeiro converter usando o SimpleDateFormat.

dá uma olhada no tópico que vai lhe ajudar.

http://www.guj.com.br/java/257376-metodo-dataformat#1340947

abs,

Evandro

O banco que estou usando é o MySQL.

Independente do banco isso fica a controle do framework, hibernate por exemplo, ou se vc fizer manual tem que ver como seu banco recebe a data, por exempplo yyyy-MM-dd que é o caso do mySql.

Vc precisa formatar sua string antes de jogar para o banco, uma maneira seria como eu lhe passei no link. ex:

// Data de nascimento no formato dd/MM/yyyy  
String entrada = request.getParameter("nascimentoTxt");  
try { 
    SimpleDateFormat formatoTela = new SimpleDateFormat("dd/MM/yyyy");
    Date data = formatoTela.parse(entrada);
    
    ps.setDate(2, new java.sql.Date(data.getTime())); 
    
} catch (ParseException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}  

abs,

Evandro