Pessoal, gostaria de mais uma ajuda de vcs, por favor
Está dando erro no campo do tipo date
java.lang.NullPointerException
at java.text.SimpleDateFormat.parse(Unknown Source)
at java.text.DateFormat.parse(Unknown Source)
at br.com.changes.model.command.CadastrarChanges.execute(CadastrarChanges.java:37)
public Date convertStringToDate(String date){
DateFormat fmt = new SimpleDateFormat("dd/MM/yyyy");
Date data = null;
try {
if(!date.equalsIgnoreCase(" / / ")){
data = new Date(fmt.parse(date).getTime());
}
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
}[/code]
Verifica se esta vindo o valor para a string, coloca um break-point na linha 14 …
String data = request.getParameter("data");
… entre no try, e veja se data, esta com o valor do request.getParameter(“data”). Caso esteja correto o valor de data, tente realizar o format da seguinte forma:
String data = request.getParameter("data");
Date datac = new Date();
/*
* Repare que eu faço (new).parse(), ao invés de new.parse(), por que :
* (new format()).parse() vai executar o new, e depois, dara um parse nesse new
* new format.parse vai tentar dar um new em um format.parse(), mas o .parse() é um date.
*/
if((data != null) && (!"".equals(data)) // evita parse em data null ou vazia
datac = (new java.text.SimpleDateFormat("dd/MM/yyyy")).parse(data);
:!:
Apenas um adendo, o que acontece por exemplo, se o usuario tentar digitar algo como “99/99/9999” no seu campo data ? Ele retorna vazio ? Ele não retorna nada ? E se o usuario digitar algo como “bacon” no input, o que acontece ? Tenta criar uma máscara ou um js para fazer o format, e evitar errinhos no input.
Antes já mostrava a exception quando clicava pra abrir o formulário, agora abre e cadastra a data
Mas como eu posso cadastrar além data, cadastrar uma hora tb? nunca fiz nesse tipo e nem tenho noção
eu teria que criar mais um campo na tabela só pra receber as horas ou é melhor fazer no campo data que já tem?
Voce pode colocar sim no mesmo campo se quiser, e na hora do format passar “dd/MM/yyyy HH:mm” pra data digitada. O problema vai ser mascarar o input.
Pra manipulação de data, eu recomendaria o uso de um calendar, eles são mais fáceis de manipular, e mais amigáveis. De uma olhada na documentação.
O que voce pode fazer, é colocar um input para dd/MM/yyyy e um para HH:mm, e fazer o seguinte:
include java.util.Calendar;
String data = request.getParameter("data"); // "dd/MM/yyyy"
String hora = request.getParameter("hora"); // "HH:mm"
Date datac = new java.util.Date();
datac = (new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm")).parse(data + " " + hora); // Concateno data + espaço + hora para ficar "dd/MM/yyyy HH:mm"; sem concatenar, ficaria "dd/MM/yyyyHH:mm"
Quanto a inserção de data e hora no banco, voce precisar ver na sua query, como voce esta executando, e tomar alguns cuidados:
No banco, o mês vem primeiro que o dia (MM/dd/yyyy HH:mm:ss), mas voce pode inserir a data como uma string. Por exemplo:
Você tem a tabela (fictícia) log, e nela voce tem o campo log_data, do tipo datetime.
O usuario digita um valor de data e um de hora, e voce os coloca no date. Então, na hora de gravar, voce recupera esses valores! O campo datetime, aceita data e hora no formato String, como por exemplo:
INSERT INTO log (log_data) VALUES (“10/18/2012 15:00:00”);
Então, o que fazer ?
Na hora de inserir, na query voce pode colocar o value do insert, pegando direto do date:
Date datac = new java.util.Date(); // Suponha que ja inicie com o valor "18/10/2012 15:00:00"
String bancoValueData = (new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm")).format(datac);
// Depois, voce faz a query:
// "INSERT INTO Tabela (Campo) VALUES (" + bancoValueData + ")"
:!: Porém, tente usar bindings, para evitar sqlInjection.