para - restar fechas en java 8
¿Hay un buen*strict*parser de fecha para Java? (2)
No veo que Joda lo reconozca como una fecha válida. Ejemplo:
strict = org.joda.time.format.DateTimeFormat.forPattern("MM/dd/yyyy")
try {
strict.parseDateTime(''40/40/4353'')
assert false
} catch (org.joda.time.IllegalFieldValueException e) {
assert ''Cannot parse "40/40/4353": Value 40 for monthOfYear must be in the range [1,12]'' == e.message
}
Lo mejor que puedo decir, tampoco lo hace DateFormat con setLenient (falso) . Ejemplo:
try {
df = new java.text.SimpleDateFormat(''MM/dd/yyyy'')
df.setLenient(false)
df.parse(''40/40/4353'')
assert false
} catch (java.text.ParseException e) {
assert e.message =~ ''Unparseable''
}
¡Espero que esto ayude!
¿Hay un buen y estricto analizador de fechas para Java? Tengo acceso a Joda-Time pero aún no he visto esta opción. Encontré la pregunta "¿Hay un buen analizador de fechas para Java?" Y, aunque esto está relacionado, es todo lo contrario. Mientras que esa pregunta era pedir un analizador de errores humano, más difuso y propenso al error humano, me gustaría un analizador estricto. Por ejemplo, con JodaTime (por lo que puedo decir) y simpleFechaFormato, si tiene un formato "MM / dd / aaaa":
analice esto: 40/40/4353
Esto se convierte en una fecha válida. Quiero un analizador que sepa que 40 es un mes y una fecha no válidos. Seguramente alguna implementación de esto existe en Java?
Una buena forma de hacer una validación estricta con DateFormat es volver a formatear la fecha analizada y verificar la igualdad con la cadena original:
String myDateString = "87/88/9999";
Date myDate = dateFormat.parse(myDateString);
if (!myDateString.equals(df.format(myDate))){
throw new ParseException();
}
Funciona de maravilla.