Volver a la página principal
domingo 20 octubre 2024
6

Cómo pasar de texto a Date en Java

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).

Conversión de Texto a 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.

Ejemplo básico usando 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();
        }
    }
}

Explicación:

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.

Formatos comunes

  • 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.

Conversión de Texto a 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.

Ejemplo usando 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);
    }
}

Explicación:

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.

Algunos ejemplos

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());

Conclusión

  • Si estás trabajando en un proyecto que usa Java 8 o posterior, es recomendable utilizar DateTimeFormatter y las clases de java.time.
  • Para proyectos anteriores a Java 8 o que dependen de la API anterior, 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.

Etiquetas:
java
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer