En Java, para convertir una cadena de texto a un objeto Date
, generalmente se utiliza la clase SimpleDateFormat
del paquete java.text
. Esta clase te permite definir un formato específico para la fecha en el texto y realizar la conversión. Sin embargo, SimpleDateFormat
es parte de la API anterior, y desde Java 8, se recomienda utilizar las clases del paquete java.time
, que son más robustas y modernas.
Aquí te mostraré cómo realizar la conversión tanto con SimpleDateFormat
(para versiones anteriores a Java 8) como con java.time.format.DateTimeFormatter
(a partir de Java 8).
Date
con SimpleDateFormat
La clase SimpleDateFormat
se utiliza para definir el formato en el que se espera que esté la fecha en la cadena de texto. Luego, se llama al método parse()
para convertir la cadena en un objeto Date
.
SimpleDateFormat
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Texto que representa la fecha
String fechaTexto = "20/10/2024";
// Definir el formato de la fecha según el texto
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
try {
// Convertir el texto a Date
Date fecha = formato.parse(fechaTexto);
System.out.println("Fecha convertida: " + fecha);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
1. SimpleDateFormat("dd/MM/yyyy")
: Crea un formato que espera una fecha en el formato día/mes/año
.
2. formato.parse(fechaTexto)
: Convierte la cadena "20/10/2024"
a un objeto Date
.
3. Excepciones: Si el texto no está en el formato correcto, el método parse()
lanza una excepción ParseException
.
yyyy-MM-dd
→ "2024-10-20"
dd/MM/yyyy
→ "20/10/2024"
MM/dd/yyyy
→ "10/20/2024"
Puedes ajustar el formato según cómo esté estructurada la cadena de texto.
Date
con DateTimeFormatter
(Java 8 y superior)
A partir de Java 8, el uso de la clase java.time.format.DateTimeFormatter
junto con LocalDate
o LocalDateTime
es la mejor práctica para trabajar con fechas. Si necesitas convertir el resultado a java.util.Date
, puedes hacerlo después de obtener el LocalDate
o LocalDateTime
.
DateTimeFormatter
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.ZoneId;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// Texto que representa la fecha
String fechaTexto = "20/10/2024";
// Definir el formato de la fecha
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
// Convertir el texto a LocalDate
LocalDate localDate = LocalDate.parse(fechaTexto, formato);
// Convertir LocalDate a Date
Date fecha = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
System.out.println("Fecha convertida: " + fecha);
}
}
1. DateTimeFormatter.ofPattern("dd/MM/yyyy")
: Crea un formateador que espera una fecha en el formato día/mes/año
.
2. LocalDate.parse(fechaTexto, formato)
: Convierte la cadena "20/10/2024"
en un objeto LocalDate
.
3. LocalDate.atStartOfDay(ZoneId.systemDefault()).toInstant()
: Convierte el LocalDate
a un Instant
usando la zona horaria del sistema.
4. Date.from(instant)
: Convierte el Instant
en un objeto Date
.
1. Convertir texto a Date
con formato yyyy-MM-dd
usando SimpleDateFormat
:
SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
Date fecha = formato.parse("2024-10-20");
2. Convertir texto a Date
con formato dd/MM/yyyy
usando DateTimeFormatter
:
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate localDate = LocalDate.parse("20/10/2024", formato);
Date fecha = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
3. Convertir texto a Date
con hora (yyyy-MM-dd HH:mm
) usando DateTimeFormatter
:
DateTimeFormatter formato = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime localDateTime = LocalDateTime.parse("2024-10-20 14:30", formato);
Date fecha = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
DateTimeFormatter
y las clases de java.time
.
SimpleDateFormat
sigue siendo una opción válida, aunque menos flexible y más propensa a errores de concurrencia.
Para más detalles, puedes revisar la documentación de SimpleDateFormat o la documentación de DateTimeFormatter.
Jorge García
Fullstack developer