Pues leyendo el Javadoc de la clase java.util.Date, me encontre la sorpresa de que uno puede crear fechas “invalidas”, por ejemplo Diciembre 32. Para bien o para mal, cuando se crea el objecto Date (usando DateFormat por ejemplo) en vez de generar una excepción, lo que hace Java con Diciembre 32, es convertirlo en Enero 1. Puede que en algunos casos, esto sirva de mucho, y evite un dolor de cabeza, al hacer esta conversión de manera automática. EL problema se da cuando ocupamos validad que la fecha ingresada sea válida en todos los sentidos. Me encontre por ahi un codigo que nos ayudaria a resolver el problema, la verdad la solución es bastante sencilla.
public Date getDate() { // Fechas serian de la forma 20091231 DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); Date myDate = formatter.parse("20091232"); // myDate ahora seria 2010-01-01, al compararla con la fecha original // nos damos cuenta que vario, es decir ocupo ajuste. Podemos decir // que la fecha ingresada no es valida y tirar una excepción if (! formatter.format(myDate).equals("20091232")){ throw new ParseException("Date is invalid",0); } return myDate;
Esta es una manera ingeniosa de resolver este problema. Si tienen otras soluciones, agradeceria que las agregaran en sus comentarios. -fr4gus
Hola, la clase SimpleDateFormat tiene un atributo “lenient”, que básicamente permite cubrir estos casos…
Por defecto, lenient es true, por lo que fechas como el 32 de diciembre son válidas, pero, si se marca en false, lanza un “java.text.ParseException”
Salida:
Fri Jan 01 00:00:00 CST 2010
java.text.ParseException: Unparseable date: “20091232”
at java.text.DateFormat.parse(Unknown Source)
at prueba.Prueba.main(Prueba.java:15)
Excelente, no sabia eso del SimpleDateFormat. Gracias por el aporte