Esta publicación está hecha en base a un error muy común al momento de validar una fecha.
Generalmente se utiliza la clase SimpleDateFormat para validar o formatear una fecha, como se muestra a continuación:
Para formatear:
import java.text.SimpleDateFormat;
import java.util.Date;
public class EjemploFecha {
public static void main(String[] args) {
Date fechaActual = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String fecha = dateFormat.format(fechaActual);
System.out.println("Fecha actual: "+fecha);
}
}
El resultado que entrega la ejecución de la clase anterior sería algo asi:
Fecha actual: 17/09/2009
Para validar:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EjemploFecha {
public static void main(String[] args) {
try {
String fechaStr = "13/02/2009";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date fecha = dateFormat.parse(fechaStr);
System.out.println("Fecha válida: "+fecha.toString());
} catch (ParseException e) {
System.out.println("Fecha no válida");
}
}
}
El resultado que entrega la ejecución de la clase anterior sería algo asi:
Fecha válida: Fri Feb 13 00:00:00 GMT-04:00 2009
Lo anterior se ve perfecto, excepto si cambiamos la fecha de entrada, ahora pondremos una fecha no válida (32/02/2009) y el resultado es el siguiente:
Fecha válida: Wed Mar 04 00:00:00 GMT-04:00 2009
Esto sucede porque la implementacón del método parse no es estricta al formato, esto significa que infiere una posible fecha. En el ejemplo anterior verifica que febrero tiene 28 días y que se le informan 32, por tanto deduce que son 4 días del mes de marzo, entregando como resultado 4 de Marzo. Para evitar este error y restringir la validación al formato especificado sin cambiar la fecha ingresada, se debe indicar explícitamente con el método setLenient como se muestra a continuación:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EjemploFecha {
public static void main(String[] args) {
try {
String fechaStr = "32/02/2009";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
Date fecha = dateFormat.parse(fechaStr);
System.out.println("Fecha válida: "+fecha.toString());
} catch (ParseException e) {
System.out.println("Fecha no válida");
}
}
}
El resultado de lo anterior sería:
Fecha no válida
Ha tener cuidado con la api :P
No hay comentarios.:
Publicar un comentario