Não sei se já existe este tópico, se sim me perdoem, já procurei tanto que cansei.
//entrada de dados com mascara em um campo texto
try{
lblData = new JLabel("Data: (dd mm aa)"); //por ex.01/04/16
lblData.setFont(new Font("Arial",Font.BOLD,16));
MaskFormatter mascaraData = new MaskFormatter("##/##/##");
mascaraData.setValidCharacters("[telefone removido]");
txtData = new JFormattedTextField(mascaraData);
txtData.setFont(new Font("Arial",Font.BOLD,16));
}catch(ParseException p) {
JOptionPane.showMessageDialog(null,"Erro ao inserir m\u00e1scara de data: " + p);
}
//recupero o valor inserido
String dat = txtData.getText();
dat = dat.replaceAll("[/]","");
//tentei fazer uma conversão, mas não deu certo, o sistema ignorou
// CastStringParaData cast = new CastStringParaData();
//Date dt = cast.converte(dat);
//gambiarra para gravar a data corretamente - não quero isso
char char1 = dat.charAt(0);
char char2 = dat.charAt(1);
char char3 = dat.charAt(2);
char char4 = dat.charAt(3);
char char5 = dat.charAt(4);
char char6 = dat.charAt(5);
String dt = ""+char5+char6+char3+char4+char1+char2;
//tabela criada – tipo da data é DATE
String criaAbreTabelaFarda = "CREATE TABLE IF NOT EXISTS farda(codigo int(4) not null auto_increment,data date,descricao varchar(50),aluno varchar(50),serie varchar(25),turno char(7),valor decimal(6,2),primary key(codigo))";
stm.execute(criaAbreTabelaFarda);
//data será gravada no banco mysql
pstm = con.prepareStatement(insereDados);
pstm.setString(1,dt);
//classe para fazer a conversão de string para date
public class CastStringParaData {
public Date converte(String data) throws ParseException {
//converte string para sql.Date
SimpleDateFormat dtaformatada = new SimpleDateFormat("yyyy/MM/dd"); //também tentei dd/MM/yyyy sem sucesso
java.util.Date utilDate = dtaformatada.parse(data);
long time = utilDate.getTime();
java.sql.Date datanasc = new java.sql.Date(time);
return datanasc;
}
}
O problema: já tentei de tudo, ou dá erro ou a data é gravada incorreta. Se entro com 01/04/16 é gravado no banco 16/04/2001. Sei que no banco é gravado yyyy/mm/dd. Não consigo de forma alguma gravar a data de forma correta. Entendam, o sistema não está gravando 2016/04/01(o que não teria problema) e sim considerando o dia como ano e o ano como dia. Por favor me ajudem. Grata, Nathalie Maria