Guide
Guía del Formato ISO 8601: Estándar de Fecha, Hora y Zona Horaria
¿Qué es ISO 8601?
ISO 8601 es un estándar internacional para representar fechas y horas en un formato claro e inequívoco. Publicado por la Organización Internacional de Normalización (ISO), este estándar elimina la confusión causada por diferentes formatos de fecha en todo el mundo (como MM/DD/AAAA vs DD/MM/AAAA) y proporciona una forma consistente de intercambiar información de fecha y hora.
El formato ISO 8601 es ampliamente utilizado en APIs, bases de datos y aplicaciones web porque es:
- Inequívoco: Sin confusión sobre el orden día/mes
- Ordenable: La ordenación lexicográfica funciona correctamente
- Legible por máquinas: Fácil de analizar por computadoras
- Legible por humanos: Aún comprensible por personas
- Universal: Funciona en todas las zonas horarias y configuraciones regionales
¿Por qué usar el formato ISO 8601?
Cuando ves una fecha como 03/04/2024, ¿significa 4 de marzo o 3 de abril? Diferentes países interpretan esto de manera diferente. ISO 8601 resuelve este problema usando el formato 2024-04-03, que siempre es inequívoco: año-mes-día.
// Formatos ambiguos (evita estos)
"03/04/2024" // ¿Es esto marzo 4 o abril 3?
"4-3-24" // ¿Es esto 2024 o 1924?
// Formato ISO 8601 (recomendado)
"2024-04-03" // Siempre 3 de abril de 2024
"2024-04-03T14:30:00Z" // 3 de abril de 2024, 2:30 PM UTC
Formatos de Fecha ISO 8601
Formato de Fecha Básico
El formato de fecha ISO 8601 estándar sigue el patrón: AAAA-MM-DD
Ejemplos:
2024-01-15- 15 de enero de 20242024-12-31- 31 de diciembre de 20242025-06-07- 7 de junio de 2025
# Ejemplo en Python
from datetime import date
hoy = date(2024, 4, 15)
fecha_iso = hoy.isoformat() # "2024-04-15"
print(f"Fecha ISO 8601: {fecha_iso}")
Formato Extendido vs Básico
ISO 8601 soporta dos formatos:
- Formato extendido (con separadores):
2024-04-15 - Formato básico (compacto):
20240415
La mayoría de las aplicaciones usan el formato extendido porque es más legible.
// Ejemplo en JavaScript
const fecha = new Date('2024-04-15');
// Formato extendido (recomendado)
const extendido = fecha.toISOString().split('T')[0]; // "2024-04-15"
// Formato básico (compacto)
const basico = extendido.replace(/-/g, ''); // "20240415"
Formatos de Hora ISO 8601
Formato de Hora Básico
El formato de hora ISO 8601 estándar sigue: HH:MM:SS o HH:MM:SS.sss
Ejemplos:
14:30:00- 2:30:00 PM09:05:30- 9:05:30 AM23:59:59.999- 11:59:59.999 PM con milisegundos
Segundos Fraccionarios
ISO 8601 soporta segundos fraccionarios con precisión variable:
14:30:00.5- Medio segundo14:30:00.123- Milisegundos (3 dígitos)14:30:00.123456- Microsegundos (6 dígitos)14:30:00.123456789- Nanosegundos (9 dígitos)
Formatos DateTime ISO 8601
Fecha y Hora Combinadas
Para representar tanto fecha como hora, ISO 8601 usa un separador T: AAAA-MM-DDTHH:MM:SS
Ejemplos:
2024-04-15T14:30:00- 15 de abril de 2024 a las 2:30 PM (hora local)2024-12-31T23:59:59- 31 de diciembre de 2024 a las 11:59:59 PM
El Separador "T"
El carácter T separa la fecha de la hora. Es requerido en el formato estándar, aunque algunos sistemas aceptan un espacio en su lugar para legibilidad.
Designadores de Zona Horaria ISO 8601
Una de las características más poderosas de ISO 8601 es su soporte para información de zona horaria.
Hora UTC (Designador Z)
El sufijo Z indica UTC (Tiempo Universal Coordinado), también llamado "hora Zulu":
2024-04-15T14:30:00Z- 2:30 PM UTC
Z es una abreviatura de +00:00.
// Ejemplo en JavaScript
const fechaUtc = new Date('2024-04-15T14:30:00Z');
console.log(fechaUtc.toISOString()); // "2024-04-15T14:30:00.000Z"
// Siempre prefiere ISO 8601 con Z para tiempos UTC
const timestamp = Date.now();
const cadenaIso = new Date(timestamp).toISOString();
console.log(cadenaIso); // "2024-04-15T14:30:00.123Z"
Desplazamientos de Zona Horaria
Para tiempos no UTC, especifica el desplazamiento desde UTC: ±HH:MM
Ejemplos:
2024-04-15T14:30:00+05:30- 2:30 PM en India (UTC+5:30)2024-04-15T14:30:00-04:00- 2:30 PM en Hora de Verano del Este (UTC-4)2024-04-15T14:30:00+00:00- Igual que Z (UTC)
# Ejemplo en Python con zona horaria
from datetime import datetime, timezone, timedelta
# Hora UTC
hora_utc = datetime(2024, 4, 15, 14, 30, 0, tzinfo=timezone.utc)
print(hora_utc.isoformat()) # "2024-04-15T14:30:00+00:00"
# Zona horaria personalizada (UTC+5:30)
ist = timezone(timedelta(hours=5, minutes=30))
hora_ist = datetime(2024, 4, 15, 14, 30, 0, tzinfo=ist)
print(hora_ist.isoformat()) # "2024-04-15T14:30:00+05:30"
Formato de Duración ISO 8601
ISO 8601 define una notación específica para duraciones usando el prefijo P (por "período").
Formato de Duración: P[n]Y[n]M[n]DT[n]H[n]M[n]S
P: Designador de duración (requerido)Y: AñosM: Meses (antes de T)D: DíasT: Designador de tiempo (separa componentes de fecha y tiempo)H: HorasM: Minutos (después de T)S: Segundos
Ejemplos de Duración
P3Y6M4DT12H30M5S = 3 años, 6 meses, 4 días, 12 horas, 30 minutos, 5 segundos
P1Y = 1 año
P6M = 6 meses
P7D = 7 días
PT2H30M = 2 horas, 30 minutos
PT45S = 45 segundos
P1DT12H = 1 día, 12 horas
ISO 8601 vs RFC 3339
RFC 3339 es un perfil de ISO 8601 comúnmente usado en internet. Las principales diferencias:
| Característica | ISO 8601 | RFC 3339 |
|---|---|---|
| Formato | AAAA-MM-DDTHH:MM:SS±HH:MM | Igual |
| UTC | Z o +00:00 | Ambos permitidos |
| Segundos fraccionarios | Opcional, cualquier precisión | Opcional, cualquier precisión |
| Separadores | Pueden omitirse (formato básico) | Requeridos (formato extendido) |
La mayoría de las APIs modernas usan RFC 3339, que es un subconjunto estricto de ISO 8601.
Mejores Prácticas ISO 8601 para Desarrolladores
1. Siempre Usa UTC para Almacenamiento
// ✅ Bueno - Almacenar en UTC
const timestamp = new Date().toISOString(); // "2024-04-15T14:30:00.123Z"
// ❌ Malo - Almacenar hora local
const horaLocal = new Date().toString(); // "Mon Apr 15 2024 14:30:00 GMT+0500"
2. Incluye Información de Zona Horaria
# ✅ Bueno - Incluye zona horaria
"2024-04-15T14:30:00+05:30"
# ❌ Malo - Falta zona horaria
"2024-04-15T14:30:00"
3. Usa Formato Extendido
// ✅ Bueno - Formato extendido
"2024-04-15T14:30:00Z"
// ❌ Malo - Formato básico (difícil de leer)
"20240415T143000Z"
4. Valida Cadenas ISO 8601
// Validación en JavaScript
function esISO8601Valido(cadenaFecha) {
const regexIso8601 = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/;
if (!regexIso8601.test(cadenaFecha)) return false;
const fecha = new Date(cadenaFecha);
return !isNaN(fecha.getTime());
}
console.log(esISO8601Valido("2024-04-15T14:30:00Z")); // true
console.log(esISO8601Valido("2024-04-15 14:30:00")); // false
Errores Comunes de ISO 8601 a Evitar
1. Falta el Separador T
// ❌ Incorrecto
"2024-04-15 14:30:00Z"
// ✅ Correcto
"2024-04-15T14:30:00Z"
2. Formato de Zona Horaria Incorrecto
# ❌ Incorrecto - Falta dos puntos en el desplazamiento
"2024-04-15T14:30:00+0530"
# ✅ Correcto - Dos puntos en el desplazamiento
"2024-04-15T14:30:00+05:30"
3. Mezclar Formatos de Fecha
// ❌ Incorrecto - Formato estadounidense
"04/15/2024T14:30:00Z"
// ✅ Correcto - ISO 8601
"2024-04-15T14:30:00Z"
4. Omitir Ceros Iniciales
# ❌ Incorrecto
"2024-4-5T9:5:0Z"
# ✅ Correcto
"2024-04-05T09:05:00Z"
ISO 8601 en Diferentes Lenguajes de Programación
JavaScript / TypeScript
// Hora actual en ISO 8601
const ahora = new Date().toISOString();
console.log(ahora); // "2024-04-15T14:30:00.123Z"
// Analizar cadena ISO 8601
const fecha = new Date("2024-04-15T14:30:00Z");
Python
from datetime import datetime, timezone
# Hora actual en ISO 8601
ahora = datetime.now(timezone.utc).isoformat()
print(ahora) # "2024-04-15T14:30:00.123456+00:00"
# Analizar cadena ISO 8601
dt = datetime.fromisoformat("2024-04-15T14:30:00+00:00")
Java
import java.time.Instant;
import java.time.ZonedDateTime;
// Hora actual en ISO 8601
String ahora = Instant.now().toString();
System.out.println(ahora); // "2024-04-15T14:30:00.123Z"
// Analizar cadena ISO 8601
ZonedDateTime dt = ZonedDateTime.parse("2024-04-15T14:30:00Z");
Go
package main
import (
"fmt"
"time"
)
func main() {
// Hora actual en ISO 8601
ahora := time.Now().UTC().Format(time.RFC3339)
fmt.Println(ahora) // "2024-04-15T14:30:00Z"
// Analizar cadena ISO 8601
dt, _ := time.Parse(time.RFC3339, "2024-04-15T14:30:00Z")
fmt.Println(dt)
}
Preguntas Frecuentes
¿Qué significa la "T" en ISO 8601?
La T es un separador entre los componentes de fecha y hora. Significa "Time" (Tiempo) y es requerida por el estándar ISO 8601 para evitar ambigüedad.
¿Es ISO 8601 lo mismo que RFC 3339?
RFC 3339 es un perfil (subconjunto) de ISO 8601 diseñado para uso en internet. RFC 3339 es más estricto y siempre requiere el formato extendido con separadores.
¿Por qué ISO 8601 usa el orden AAAA-MM-DD?
Este orden (de unidad mayor a menor) permite ordenación natural. Cuando ordenas fechas ISO 8601 alfabéticamente, automáticamente se ordenan cronológicamente.
¿Qué zona horaria debo usar para almacenar timestamps?
Siempre almacena timestamps en UTC (con el designador Z) en bases de datos y APIs. Convierte a hora local solo cuando muestres al usuario.
Conclusión
ISO 8601 es el estándar de oro para representar fechas y horas en sistemas de software. Siguiendo el formato ISO 8601, aseguras que tus timestamps sean inequívocos, ordenables y compatibles con sistemas en todo el mundo.
Puntos clave:
- Usa
AAAA-MM-DDTHH:MM:SSZpara tiempos UTC - Incluye información de zona horaria (
Zo±HH:MM) - Almacena timestamps en UTC, muestra en hora local
- Valida cadenas ISO 8601 antes de analizarlas
- Usa formato extendido (con separadores) para legibilidad
¡Dominar el formato ISO 8601 es esencial para cualquier desarrollador que trabaje con fechas y horas!
¡Prueba nuestro Convertidor ISO 8601 para convertir entre formatos!