Cómo convertir entre formatos horarios

· 9 min de lectura

Los formatos de tiempo varían entre sistemas, API y países. Marcas de tiempo Unix en respuestas de API, ISO 8601 en bases de datos, relojes de 12 horas en EE. UU., relojes de 24 horas en Europa: convertir entre ellos es una necesidad constante para desarrolladores y para cualquiera que trabaje con datos internacionales. Entender por qué existe cada formato, dónde brilla y dónde muerde convierte la conversión en un reflejo rápido en vez de una fuente recurrente de bugs sutiles.

Breve historia de los formatos de tiempo

Estandarizar el tiempo es más antiguo que internet. En 1884 la Conferencia Internacional del Meridiano estableció la hora media de Greenwich y el meridiano de origen, lo que dio al mundo una referencia común por primera vez. El reloj de 24 horas se extendió por la aviación y los militares por la misma razón: elimina la ambigüedad AM/PM que convierte una reserva de medianoche en un vuelo de mediodía.

El tiempo Unix llegó con el núcleo Unix original en 1971, contando segundos desde el 1 de enero de 1970 UTC (la "epoch"). La elección fue pragmática: un entero de 32 bits podía cubrir décadas, ordenar marcas de tiempo equivalía a ordenar números, y calcular intervalos era una resta. ISO 8601 llegó en 1988 para estandarizar el lado legible: año-mes-día en orden big-endian, T como separador fecha/hora y Z para UTC. RFC 3339 (2002) es un perfil más restrictivo de ISO 8601 diseñado para protocolos de internet. RFC 2822 (2001) define el formato estilo correo con nombres de día y offsets. Cada formato resuelve un problema real; ninguno reemplaza a los otros por completo.

Formatos de tiempo comunes

Seis formatos cubren casi todo lo que encontrarás en la práctica. La primera columna es el nombre que verás en la documentación; la columna de ejemplo muestra cómo se ve 14:30 del 7 de abril de 2024 UTC.

FormatoEjemploUsado por
Marca de tiempo Unix (segundos)1712502600API, bases de datos, tokens JWT, líneas de log
Marca de tiempo Unix (ms)1712502600000JavaScript, Java, Android
Marca de tiempo Unix (microsegundos)1712502600000000Postgres, Kafka, OpenTelemetry
ISO 8601 / RFC 33392024-04-07T14:30:00ZAPI JSON, bases de datos, logs
RFC 2822Sun, 07 Apr 2024 14:30:00 +0000Cabeceras de correo, cabeceras HTTP
24 horas14:30Europa, militar, aviación
12 horas2:30 PMEE. UU., uso informal
Día del año (juliano)2024-098Aviónica, datos científicos
Fecha por semana2024-W14-7Planificación industrial, banca

La mayoría de los equipos se asientan en milisegundos Unix para almacenamiento e ISO 8601 para tránsito, con formatos de visualización elegidos por locale. La elección importa menos que la consistencia: elige un formato principal, documéntalo y convierte en los bordes.

Referencia rápida de conversión

12 horas a 24 horas

El reloj de 12 horas tiene dos rarezas: las 12 AM son medianoche (el inicio del día) y las 12 PM son el mediodía. La tabla siguiente cubre los casos que confunden a la gente.

12 horas24 horas
12:00 AM (medianoche)00:00
1:00 AM01:00
11:59 AM11:59
12:00 PM (mediodía)12:00
12:01 PM12:01
1:00 PM13:00
6:00 PM18:00
11:59 PM23:59

Marcas de tiempo a fechas

El conversor epoch traduce instantáneamente marcas de tiempo Unix a fechas legibles y viceversa. El conversor detecta automáticamente los formatos de segundos (10 dígitos) y milisegundos (13 dígitos), así que puedes pegar un valor desde cualquier fuente sin preocuparte por la unidad.

Una comprobación de cordura útil: divide por 86400 (segundos en un día) y luego suma 1970 días para ubicar mentalmente cualquier marca de tiempo. 1712502600 / 86400 ~ 19820 días, unos 54 años después de 1970, lo que lo sitúa en 2024. No es preciso pero basta para detectar errores de factor 1000 de un vistazo.

Ejemplos de conversión en código

La mayoría de los desarrolladores eventualmente necesita convertir marcas de tiempo en código. Las API principales son cortas:

Una herramienta de conversión es más rápida que cualquiera de estos one-liners cuando solo necesitas traducir un valor, que es la mayor parte del tiempo durante la depuración.

Por qué ISO 8601 gana para almacenamiento

ISO 8601 (y el perfil RFC 3339) se ordena correctamente como cadena pura. 2024-04-07T14:30:00Z va alfabéticamente antes de 2024-04-07T15:00:00Z, que va antes de 2024-04-08T00:00:00Z. Esa propiedad te deja ordenar marcas de tiempo sin parsearlas, agrupar líneas de log con sort | uniq -c y razonar sobre rangos con simples comparaciones de cadenas.

También es inequívoco de una forma que los formatos regionales no son. 04/07/2024 podría ser 7 de abril (EE. UU.) o 4 de julio (la mayor parte de Europa); 2024-04-07 es lo mismo en todas las locales. Para el intercambio máquina a máquina, esa falta de ambigüedad vale más que cualquier otra consideración de formato.

Errores comunes a evitar

Herramientas y bibliotecas alternativas

Un conversor maneja el caso puntual; para código de producción acudirás a una biblioteca.

Herramienta / bibliotecaLenguajeFortalezaA tener en cuenta
Conversor webNavegadorInstantáneo, sin instalación, maneja ambigüedades comunesUn valor a la vez
dateutilPythonParser tolerante, consciente de husosMás lento que datetime para trabajo masivo
arrowPythonAPI amigable, defaults ISODependencia extra para proyectos pequeños
date-fnsJavaScriptTree-shakable, inmutableCada función es su propio import
dayjsJavaScriptPequeño, API compatible con momentModelo de plugins para extras
luxonJavaScriptHusos IANA de primera claseBundle más grande
chronoRustTipos ricos, RFC 3339 nativoRitmo de mantenimiento variable
Joda-Time / java.timeJavaEl diseño de referencia que influyó en los demásEvita los legacy Date y Calendar
NodaTimeC#/.NETInstantes, duraciones y calendarios bien separadosMigrar desde DateTime no es trivial
GNU dateShell LinuxParseo flexible con -dBSD/macOS usa flags incompatibles

La biblioteca correcta depende de tu stack; la disciplina correcta es la misma en todas partes: almacena UTC, transmite ISO 8601, formatea solo para mostrar y nunca confíes en una marca de tiempo sin huso explícito.

Privacidad y el conversor

El conversor de formatos de tiempo corre enteramente en tu navegador. Las marcas de tiempo que pegas y las fechas que generas nunca salen de la página. No hay registro en servidor de qué valores se convirtieron, ni analítica sobre qué formatos son populares, ni manera de que nadie ligue una solicitud a tu IP. Las conversiones de tiempo no son datos personales en sí, pero las marcas de tiempo en tus logs (horas de inicio de sesión, horas de transacción, ventanas de planificación) a menudo lo son, y pasarlas por un conversor de terceros podría filtrar detalles operativos. Hacer el trabajo del lado del cliente mantiene esa información en tu máquina donde pertenece. Para una tarea tan rutinaria como pasar entre segundos e ISO 8601, el ajuste de privacidad por defecto debería ser sin transmisión, sin registro, sin terceros en el bucle.

Preguntas frecuentes

¿Qué es el formato ISO 8601?

ISO 8601 es el estándar internacional para representar fechas y horas. Se parece a 2026-04-07T14:30:00Z, donde T separa la fecha y la hora, y Z indica UTC. No es ambiguo sea cual sea el idioma.

¿Por qué las API usan marcas de tiempo Unix en lugar de fechas legibles?

Las marcas de tiempo Unix son un único número, fácil de guardar, ordenar y comparar. Son neutrales respecto a la zona horaria (siempre UTC) y ocupan menos espacio que una cadena de fecha formateada. El compromiso: no son legibles para un humano.

¿Qué significa la Z al final de una marca de tiempo?

La Z significa «Zulu time», otro nombre para UTC (Coordinated Universal Time). Una marca de tiempo terminada en Z está en UTC, no en hora local.

¿Cómo convertir una hora 24 h a 12 h?

Para horas de 1 a 12, la hora se mantiene (añade AM para 0-11, PM para 12). Para 13-23, resta 12 y añade PM. 00:00 pasa a 12:00 AM (medianoche). 12:00 pasa a 12:00 PM (mediodía).

What is the Year 2038 problem?

32-bit signed Unix timestamps overflow on 19 January 2038 at 03:14:07 UTC, after which they wrap around to negative values that look like dates in 1901. Most modern systems use 64-bit timestamps and are unaffected, but legacy embedded devices, old databases, and 32-bit time_t in some C code still need to be audited.

How are leap seconds handled in Unix time?

Unix time pretends leap seconds do not exist. The clock simply repeats or stretches the affected second, so a Unix timestamp is not a strict count of elapsed SI seconds. For most applications this is fine, but precision-timing code (astronomy, GPS, high-frequency trading) needs TAI or UTC with explicit leap-second handling.