Verificando data independente de separador

Pessoal,

Uma dúvida. Eu recebo um campo com uma data e quero verificar que a mesma está preenchida corretamente. Atualmente uso um SimpleDateFormat com uma máscara “dd/MM/yyyy”. O problema é que eu quero aceitar também o formato “dd-MM-yyyy” sem fazer duas passagens.

Ou seja, eu queria uma passagem mais limpa que, por exemplo:

private boolean validaData(String data)
{
boolean ok = false;
SimpleDateFormat formatoData;
try{
formatoData = new SimpleDateFormat("dd/MM/yyyy");
formatoData.parse(data);
ok = true;
}catch(java.text.ParseException jtP){}
try{
formatoData = new SimpleDateFormat("dd-MM-yyyy");
formatoData.parse(data);
ok = true;
}catch(java.text.ParseException jtP){}
return ok
}

Escrevi esse código na mão só para ilustrar.

Pesquisei um pouco aqui e fiz alguns testes, mas não consegui o efeito que deseja.

Uma solução alternativa a fazer duas passagens é fazer um replaceAll( “-”, “/” ) na variável “data” antes de fazer o parse.

LIPE:
Uma solução alternativa a fazer duas passagens é fazer um replaceAll( “-”, “/” ) na variável “data” antes de fazer o parse.

que gambiarra heim… mas realmente não vejo outra solução para isto a não ser esta gambi…

replaceall pode ser uma solução. Talvez o melhor seja em separar isso em um método pré avaliação do dado, para quando passar no SimpleDateFormat ser tudo ou nada de uma só vez.

Na verdade estou estudando para ver se tem como ignorar qual o caracter (vou tentar um ?).

obrigado…

Eu tentei aqui o #, o ? e nada…

Verifique a String inteira e pegue somente os digitos (Character.isDigit()) e crie uma nova String somente com os números e somente um pattern do tipo ddMMyyyy, acho que é melhor do que replace né…

ao invés do replaceAll (que compara strings) optei pelo replace(char,char). com isso a performance não vai ser muito detonada e como as strings tem usualmente um tamanho máximo de 10 caracteres, não creio seja grave.

Tentei todos os tipos de wildcards no SimpleDateFormat e li o javadoc para ver se ajudava e nada. Considero-me vencido… :frowning:

Não se considere vencido, considere a API de datas do Java uma porcaria…