¿Cómo funciona java.text.SimpleDateFormat para convertir fechas?

| Última modificación: 16 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

A veces, poner una fecha en Java no es tan simple como suena. Te puede suceder que no encuentras el formato de fecha que necesitas o quizás has intentado convertir una cadena en una fecha y el código simplemente no funciona como esperabas. Por eso, voy a facilitarte la vida enseñándote java.text.SimpleDateFormat para que formatees y analices fechas en Java como todo un experto.

java.text.SimpleDateFormat qué es

¿Qué es java.text.SimpleDateFormat?

Te lo explico con palabras muy simples: java.text.SimpleDateFormat es una clase de Java que te deja convertir fechas a cadenas de texto y viceversa. O sea, permite el formateo (conversión de Date a String) y el análisis (conversión de String a Date) de las fechas y horas en este lenguaje de programación.

Lo que me ha fascinado de esta clase es que te deja personalizar los formatos, usando patrones definidos.

Características principales

  1. Formateo personalizado: Usa patrones como “dd/MM/yyyy” o “E, MMM dd yyyy” para definir cómo se deben mostrar las fechas.
  2. Análisis flexible: Convierte cadenas de texto en objetos Date, siempre y cuando la cadena coincida con el patrón.
  3. Compatibilidad con idiomas: Puedes definir localizaciones para manejar formatos específicos de cada región.

Patrones comunes en java.text.SimpleDateFormat

Algo muy importante aquí es que sepas que, el patrón que defines en java.text.SimpleDateFormat determina cómo se muestra o analiza una fecha.

Te enseño los más comunes:

  • “dd/MM/yyyy”: Día/Mes/Año (ejemplo: 14/12/2024).
  • “MM/dd/yyyy”: Mes/Día/Año (ejemplo: 12/14/2024).
  • “E, MMM dd yyyy”: Día de la semana, Mes Día Año (ejemplo: Sun, Dec 14 2024).
  • “HH:mm:ss”: Hora:Minuto:Segundo (ejemplo: 15:30:45).

¿Cómo usar java.text.SimpleDateFormat? Con ejemplos prácticos

Para usar esta clase, primero debes definir un patrón de fecha que describa cómo quieres formatear o analizar las fechas.

Luego, puedes usar métodos como format() para convertir un Date en texto o parse() para hacer lo opuesto.

Convierte Date a String

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
public static void main(String[] args) {
// Crear un objeto Date con la fecha actual
Date fechaActual = new Date();

// Definir un patrón de formato
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

// Convertir Date a String
String fechaFormateada = formato.format(fechaActual);
System.out.println("Fecha formateada: " + fechaFormateada);
}
}

Mira cómo te queda la salida:

Fecha formateada: 14/12/2024

Convierte String a Date

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
public static void main(String[] args) {
try {
// Definir el formato de la fecha
SimpleDateFormat formato = new SimpleDateFormat("dd-MM-yyyy");

// Cadena de texto a analizar
String textoFecha = "25-12-2024";

// Convertir String a Date
Date fecha = formato.parse(textoFecha);
System.out.println("Fecha convertida: " + fecha);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Observa la salida:

Fecha convertida: Wed Dec 25 00:00:00 GMT 2024

Ejemplo práctico con múltiples formatos

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
public static void main(String[] args) {
Date fechaActual = new Date();

// Diferentes formatos
SimpleDateFormat formato1 = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat formato2 = new SimpleDateFormat("E, MMM dd yyyy");
SimpleDateFormat formato3 = new SimpleDateFormat("HH:mm:ss");

// Mostrar la fecha en distintos formatos
System.out.println("Formato 1: " + formato1.format(fechaActual));
System.out.println("Formato 2: " + formato2.format(fechaActual));
System.out.println("Formato 3: " + formato3.format(fechaActual));
}
}

Así te queda la salida:

Formato 1: 14/12/2024
Formato 2: Sun, Dec 14 2024
Formato 3: 15:30:45

Ejemplo con localización

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
public static void main(String[] args) {
Date fechaActual = new Date();

// Formato en español
SimpleDateFormat formatoEspañol = new SimpleDateFormat("EEEE, dd MMMM yyyy", new Locale("es", "ES"));
System.out.println("Fecha en español: " + formatoEspañol.format(fechaActual));

// Formato en inglés
SimpleDateFormat formatoIngles = new SimpleDateFormat("EEEE, dd MMMM yyyy", Locale.US);
System.out.println("Fecha en inglés: " + formatoIngles.format(fechaActual));
}
}

Mira la salida:

Fecha en español: domingo, 14 diciembre 2024
Fecha en inglés: Sunday, December 14 2024

Limitaciones de java.text.SimpleDateFormat

Recuerda esto cuando vayas a usar esta clase:

  1. No es thread-safe: No puede ser compartida entre varios hilos sin sincronización.
  2. Propenso a errores de análisis: Si el formato de la cadena no coincide exactamente con el patrón, se lanzará una excepción.

Creo que ya entendiste que java.text.SimpleDateFormat es una clase valiosa para trabajar con fechas en Java, muy buena para formatear y analizar datos según necesidades específicas. Además, son pocas las limitaciones que tiene, en serio que es muy práctica y flexible para la mayoría de los proyectos.

¿Con ganas de poner todo esto en práctica? No esperes más y apúntate al Bootcamp de Java Full Stack de KeepCoding. Aprende desde las bases hasta las técnicas más avanzadas, prepárate para un sector tecnológico con alta demanda y asegura tu futuro en una industria que ofrece estabilidad y grandes oportunidades. ¡Da el salto y transforma tu vida profesional hoy mismo!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado