Bom dia a todos, estou com o seguinte problema:
O usuário insere a data no seguinte formato: dd/MM/yyyy e preciso gravar essa data no banco de dados no entanto ele só aceita o formato yyyy-MM-dd. Existe alguma classe que possa realizar a conversão?
Bom dia a todos, estou com o seguinte problema:
O usuário insere a data no seguinte formato: dd/MM/yyyy e preciso gravar essa data no banco de dados no entanto ele só aceita o formato yyyy-MM-dd. Existe alguma classe que possa realizar a conversão?
Pesquise por SimpleDateFormat e DateFormat.
Você grava a data enviando uma String? ou um Date?
O SimpleDateFormat retorna sempre desse jeito:
Thu Dec 03 00:00:00 AMT 11
Vou dar uma olhada no DateFormat.
String.
Se for uma conversão entre Strings você tem opções, pode usar o DateFormat, pra criar um Date e depois pegar de volta em outro formato, ou pode trabalhar com as Strings mesmo. Ex:String dataInicial = "20/06/2012";
String[] values = dataInicial.split("/");
String dataFinal = values[2]+"-"+values[1]+"-"+values[0]; Ou até uma brincadeira com Expressões Regulares, feita em um artigo do próprio GUJString dataInicial = "20/06/2012";
Pattern pattern = Pattern.compile("(\\d{2})/(\\d{2})/(\\d{4})");
Matcher matcher = pattern.matcher(dataInicial);
String dataFinal = "";
if(matcher.find()){
dataFinal = matcher.replaceAll("$3-$2-$1");
}
Consegui resolver o problema com a sua sugestão, usando SimpleDateFormat. O problema é que eu fiz assim:
String pattern = "yyyy/MM/dd";
SimpleDateFormat format = new SimpleDateFormat(pattern);
System.out.println(format.format(new Date(dataInicial)));
O metodo construtor Date(String s) está marcado como deprecated. Existe alguma forma de se obter o mesmo resultado (ou melhor) utilizando um metodo que não esteja deprecated?
Se for uma conversão entre Strings você tem opções, pode usar o DateFormat, pra criar um Date e depois pegar de volta em outro formato, ou pode trabalhar com as Strings mesmo. Ex:String dataInicial = "20/06/2012"; String[] values = dataInicial.split("/"); String dataFinal = values[2]+"-"+values[1]+"-"+values[0];Ou até uma brincadeira com Expressões Regulares, feita em um artigo do próprio GUJString dataInicial = "20/06/2012"; Pattern pattern = Pattern.compile("(\\d{2})/(\\d{2})/(\\d{4})"); Matcher matcher = pattern.matcher(dataInicial); String dataFinal = ""; if(matcher.find()){ dataFinal = matcher.replaceAll("$3-$2-$1"); }
Nunca havia pensado em fazer dessa forma. Eu já conhecia o split mas nunca pensei em usa-lo dessa forma.
Obrigado aos 2 pela ajuda.
Consegui resolver o problema com a sua sugestão, usando SimpleDateFormat. O problema é que eu fiz assim:
String pattern = "yyyy/MM/dd"; SimpleDateFormat format = new SimpleDateFormat(pattern); System.out.println(format.format(new Date(dataInicial)));O metodo construtor Date(String s) está marcado como deprecated. Existe alguma forma de se obter o mesmo resultado (ou melhor) utilizando um metodo que não esteja deprecated?
Se for uma conversão entre Strings você tem opções, pode usar o DateFormat, pra criar um Date e depois pegar de volta em outro formato, ou pode trabalhar com as Strings mesmo. Ex:String dataInicial = "20/06/2012"; String[] values = dataInicial.split("/"); String dataFinal = values[2]+"-"+values[1]+"-"+values[0];Ou até uma brincadeira com Expressões Regulares, feita em um artigo do próprio GUJString dataInicial = "20/06/2012"; Pattern pattern = Pattern.compile("(\\d{2})/(\\d{2})/(\\d{4})"); Matcher matcher = pattern.matcher(dataInicial); String dataFinal = ""; if(matcher.find()){ dataFinal = matcher.replaceAll("$3-$2-$1"); }Nunca havia pensado em fazer dessa forma. Eu já conhecia o split mas nunca pensei em usa-lo dessa forma.
Obrigado aos 2 pela ajuda.
public java.util.Date converteStringParaData(String recebida, String formato){
SimpleDateFormat sdf = new SimpleDateFormat(formato);//normalmente formato = "dd/MM/yyyy"
java.util.Date dt = null;
try{
dt = sdf.parse(recebida);
}catch(ParseException pe){}
return dt;
}
E quando for salvar, usando PreparedStatement
PreparedStatement stm = con.prepareStatement(query);
stm.setDate(1, new java.sql.Date(converteStringParaData(str, "dd/MM/yyyy").getTime()));
stm.execute();
Tratar datas como Strings, em bancos de dados é uma solução ruim, infantil. Embora as conversões pareçam mais complexas, elas garantem uma qualidade maior ao que você desenvolve.
Concordo que uma pessima solução, realmente preciso me livrar desse vicio.