Clase Java SimpleDateFormat

SimpleDateFormates una clase de Java utilizada para formatear y analizar fechas y horas, que pertenece aljava.textpaquete. Permite convertir objetos de fecha (Date) en cadenas con un formato específico, o analizar cadenas de fecha formateadas de nuevo en objetos de fecha.


Uso básico

1. Crear un objeto SimpleDateFormat

Para usarSimpleDateFormat, primero necesitas crear una instancia y especificar el patrón de formato de fecha:

Ejemplo

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

public class Main {
    public static void main(String[] args) {
        // Crear un objeto SimpleDateFormat y especificar el formato
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       
        // Obtener la fecha y hora actuales
        Date now = new Date();
       
        // Formatear la fecha como cadena
        String formattedDate = sdf.format(now);
        System.out.println("Hora actual: " + formattedDate);
    }
}

El resultado es:

当前时间: 2025-05-01 11:35:07

2. Símbolos comunes de patrones de formato

Los siguientes son símbolos de patrones de formato comunes:

Símbolo Significado Ejemplo
yyyy Año de cuatro dígitos 2023
MM Mes de dos dígitos 01-12
dd Día (fecha) de dos dígitos 01-31
HH Hora en formato de 24 horas 00-23
mm Minutos 00-59
ss Segundos 00-59
E Día de la semana Mon, Tue, etc.
a Marcador AM/PM AM o PM

Formateo de fechas

va aDateformatear objetos como cadenas:

Ejemplo

SimpleDateFormat sdf = new SimpleDateFormat(yyyy 'año' MM 'mes' dd 'día' EEEE a hh:mm:ss);
Date now = new Date();
System.out.println(sdf.format(now));
// Ejemplo de salida: 2023 año 11 mes 15 día miércoles PM 03:45:22

Análisis (parseo) de fechas

Analizar una cadena de fecha formateada en un objetoDate:

Ejemplo

try {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateString = "2023-11-15";
    Date date = sdf.parse(dateString);
    System.out.println(date);
    // Salida: Wed Nov 15 00:00:00 CST 2023
} catch (ParseException e) {
    e.printStackTrace();
}

Nota: al analizar se puede lanzar una excepciónParseException, por lo que se requiere manejo de excepciones.


Problema de seguridad de hilos (thread-safety)

SimpleDateFormatNo es seguro para hilos. Si se comparte la misma instancia en un entorno multiproceso,SimpleDateFormatse pueden producir problemas. Soluciones:

  1. Crear una nueva instancia cada vez que se use (rendimiento más bajo)
  2. UsarThreadLocalpara almacenar una instancia por hilo
  3. Usar la clase de Java 8DateTimeFormatter(recomendado)

Ejemplo

// Solución usando ThreadLocal
private static final ThreadLocal<SimpleDateFormat> dateFormat =
    ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));

// Modo de uso
String formattedDate = dateFormat.get().format(new Date());

Alternativa en Java 8

En Java 8 y versiones posteriores, se recomienda usar las clases del paquetejava.time:

Ejemplo

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Crear el formateador
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
       
        // Obtener la hora actual y formatear
        LocalDateTime now = LocalDateTime.now();
        String formattedDate = now.format(formatter);
        System.out.println("Hora actual: " + formattedDate);
       
        // Analizar la cadena como fecha y hora
        LocalDateTime parsedDate = LocalDateTime.parse("2023-11-15 14:30:00", formatter);
        System.out.println("Hora analizada: " + parsedDate);
    }
}

DateTimeFormatterEs seguro para hilos, ofrece mejor rendimiento y se recomienda para nuevos proyectos.


Resumen

  1. SimpleDateFormatSe utiliza para formatear y analizar fechas.
  2. Especifica el formato de fecha mediante una cadena de patrón.
  3. No es seguro para hilos, se debe prestar atención a su uso en entornos multiproceso.
  4. En Java 8 y versiones posteriores se recomienda usarDateTimeFormatter

Al dominarSimpleDateFormat, puedes manejar de manera flexible las necesidades de conversión de varios formatos de fecha y hora en programas Java.

A continuación se muestran los métodos comunes de la clase java.text.SimpleDateFormat:

Constructores

Método Descripción
SimpleDateFormat() Construye un objeto con el patrón predeterminado y los símbolos de formato de fecha del entorno local (locale) predeterminado.
SimpleDateFormat(String pattern) Construye un objeto con el patrón dado y los símbolos de formato de fecha del entorno local predeterminado.
SimpleDateFormat(String pattern, Locale locale) Construye un objeto con el patrón dado y los símbolos de formato de fecha del entorno local dado.

Símbolos comunes de patrones de formato

Símbolo Significado Ejemplo
y año yyyy → 2023
M mes MM → 07, MMM → Jul, MMMM → July
d Día del mes dd → 15
H Hora (0-23) HH → 14
h Hora (1-12) hh → 02
m Minutos mm → 30
s segundo ss → 45
S Milisegundos SSS → 789
E Día de la semana EEE → Mon, EEEE → Monday
a Marcador AM/PM a → PM
z Zona horaria z → CST, zzzz → China Standard Time

Métodos principales

Método Descripción
String format(Date date) Formatea un Date como una cadena de fecha/hora
Date parse(String source) Analiza texto de una cadena para generar un objeto Date
void applyPattern(String pattern) Aplica un nuevo patrón de fecha y hora
String toPattern() Devuelve la cadena de patrón de fecha y hora actual
void setTimeZone(TimeZone zone) Establece la zona horaria
TimeZone getTimeZone() Obtiene la zona horaria
void setLenient(boolean lenient) Establece si el análisis es permisivo (default true)
boolean isLenient() Determina si el análisis es permisivo
Otras extensiones