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.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
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
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:
- Crear una nueva instancia cada vez que se use (rendimiento más bajo)
- Usar
ThreadLocalpara almacenar una instancia por hilo - Usar la clase de Java 8
DateTimeFormatter(recomendado)
Ejemplo
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.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
SimpleDateFormatSe utiliza para formatear y analizar fechas.- Especifica el formato de fecha mediante una cadena de patrón.
- No es seguro para hilos, se debe prestar atención a su uso en entornos multiproceso.
- En Java 8 y versiones posteriores se recomienda usar
DateTimeFormatter
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 |