Después de de esta extensa compilación de datos resolvimos este asunto que suelen tener muchos lectores. Te compartimos la respuesta y nuestro objetivo es servirte de mucha ayuda.
Solución:
Usar DateFormat.setLenient(false)
decirle al DateFormat
/SimpleDateFormat
que quieres que sea estricto.
Set Lenient funcionará en la mayoría de los casos, pero si desea verificar el string patrón, entonces esto podría ayudar,
String s = "03/6/1988";
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try
sdf.setLenient(false);
Date d = sdf.parse(s);
String s1 = sdf.format(d);
if (s1.equals(s))
System.out.println("Valid");
else
System.out.println("Invalid");
catch (ParseException ex)
// TODO Auto-generated catch block
ex.printStackTrace();
Si da la entrada como “03/06/1988”, obtendrá un resultado válido.
java.time
Me gustaría contribuir con la respuesta moderna. Cuando se hizo esta pregunta en 2011, era razonable utilizar SimpleDateFormat
y Date
. Ya no lo es. Esas clases siempre estuvieron mal diseñadas y fueron reemplazadas por java.time, la API moderna de fecha y hora de Java, en 2014, por lo que ahora están desactualizadas.
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd-MM-uuuu");
String dateString = "13-13-2007";
LocalDate date = LocalDate.parse(dateString, dateFormatter);
Este código proporciona la excepción que esperaba (y tenía buenas razones para esperar):
Excepción en el hilo “principal” java.time.format.DateTimeParseException: No se pudo analizar el texto ’13 -13-2007 ‘: Valor no válido para MonthOfYear (valores válidos 1 – 12): 13
Tenga en cuenta también y disfrute el mensaje de excepción preciso e informativo.
DateTimeFormatter
tiene tres estilos de resolución, estricto, inteligente y tolerante. Inteligente es el valor predeterminado y rara vez necesitará algo más. Utilice estricto si desea asegurarse de detectar todas las fechas no válidas en todas las circunstancias.
Enlaces
- Tutorial de Oracle: Fecha y hora que explica cómo usar java.time.
uuuu
versusyyyy
enDateTimeFormatter
formateo de códigos de patrón en Java?