SimpleDateFormat para validar fechas de usuario // parseo de strings a fechas en Java
Parseando fechas en Java con SimpleDateFormat
Cuando desarrollas interfaces de usuario para software de gestión, a menudo necesitas validar y transformar la entrada del usuario antes de almacenarla en una base de datos o archivo. Para las fechas, la entrada del usuario suele llegar como cadenas, que deben convertirse en objetos de fecha de Java.
La clase SimpleDateFormat
del paquete java.text
es una forma de analizar estas cadenas en objetos java.util.Date
.
Así es como puedes usarla de manera efectiva.
Uso básico de SimpleDateFormat
La clase SimpleDateFormat
proporciona un método llamado parse(String source)
que toma una cadena de fecha y la convierte en un objeto Date
.
Aquí tienes un ejemplo:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateParsingExample {
public static void main(String[] args) {
// Create a SimpleDateFormat object with the desired pattern
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
// Disable lenient parsing to enforce strict date validation
sdf.setLenient(false);
try {
System.out.println(sdf.parse("25/12/2007"));
// Output: Sun Dec 25 00:00:00 CET 2007
} catch (ParseException ex) {
System.err.println("Error parsing date: " + ex.getMessage());
}
try {
System.out.println(sdf.parse("34/15/2002"));
// Output: Invalid date format: Unparseable date: "34/15/2002"
} catch (ParseException ex) {
System.err.println("Invalid date format: " + ex.getMessage());
}
try {
System.out.println(sdf.parse("28/02/202"));
// Output: Sun Feb 28 00:00:00 GMT 202
} catch (ParseException ex) {
System.err.println("Invalid date format: " + ex.getMessage());
}
}
}
Puntos clave
- Especificación del patrón: El patrón de formato (por ejemplo,
"dd/MM/yyyy"
) define cómo debe estar estructurada la cadena de entrada. - Análisis estricto: Usa
sdf.setLenient(false)
para asegurarte de que las fechas inválidas (como "34/15/2002") lancen unaParseException
en lugar de ajustarse automáticamente. En el ejemplo, sisetLenient
se estableciera entrue
, la fecha "34/15/2002" se parsearía comoThu Apr 03 00:00:00 GMT 2003
. - Validación de la entrada: El último ejemplo se parsea correctamente, sin embargo, dependiendo de los requisitos, este podría no ser el comportamiento deseado.
Manejo de la longitud incorrecta de la entrada
En ocasiones, una cadena de fecha podría tener un formato válido pero una longitud incorrecta (por ejemplo, "28/02/202").
Para manejar estos casos, puedes agregar lógica de validación personalizada:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EnhancedDateParsing {
public static void main(String[] args) {
try {
System.out.println(parseDate("28/02/202"));
// Output: Invalid date format: Date with incorrect length: 28/02/202
} catch (ParseException ex) {
System.err.println("Invalid date format: " + ex.getMessage());
}
}
public static Date parseDate(String date) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
sdf.setLenient(false);
if (date.length() != 10) {
throw new ParseException("Date with incorrect length: " + date, 0);
}
return sdf.parse(date);
}
}
Este enfoque garantiza que solo se parseen cadenas de fecha válidas y con el formato correcto.