¿Qué es una marca de tiempo Unix? La guía completa
¿Qué es una marca de tiempo Unix?
Una marca de tiempo Unix (también llamada hora POSIX u hora de Epoch) es un sistema para rastrear el tiempo que cuenta el número de segundos transcurridos desde el epoch Unix — 00:00:00 UTC del 1 de enero de 1970 — excluyendo los segundos intercalares.
A diferencia de las fechas legibles que varían según la zona horaria ("19 de julio de 2026, 3:30 p. m. EST"), una marca de tiempo Unix es un entero único que representa el mismo instante en todas partes de la Tierra. Por ejemplo, la marca de tiempo 1785292800 corresponde a un instante específico, tanto si estás en Nueva York, Londres o Tokio.
Las marcas de tiempo Unix son la columna vertebral del manejo del tiempo en la informática moderna. Los sistemas operativos, los lenguajes de programación, las bases de datos y los sistemas de archivos dependen de esta simple representación entera internamente.
El epoch Unix: ¿por qué el 1 de enero de 1970?
La elección del 1 de enero de 1970 como "epoch" (el punto de partida) no fue arbitraria. Varias consideraciones prácticas llevaron a esta decisión:
- Desarrollo temprano de Unix: El sistema operativo Unix fue desarrollado en los Laboratorios Bell a finales de la década de 1960 y principios de la de 1970. Cuando el sistema de tiempo se estandarizó a principios de la década de 1970, el 1 de enero de 1970 era un punto de referencia limpio y reciente.
- Simplicidad: El tiempo en los primeros sistemas Unix se almacenaba como un entero con signo de 32 bits que contaba segundos. Usar una fecha reciente maximizaba el rango representable hacia el futuro.
- Precedente: El epoch se formalizó en el primer estándar POSIX, convirtiéndolo en la referencia universal para los sistemas derivados de Unix.
Los sistemas previos similares a Unix habían usado fechas de epoch diferentes, pero el epoch de 1970 se impuso y ha sido el estándar para todos los sistemas compatibles con POSIX desde entonces.
Cómo funciona el valor de la marca de tiempo
La idea central es sencilla:
- Una marca de tiempo de
0significa exactamente 1 de enero de 1970, 00:00:00 UTC - Una marca de tiempo de
86400(60 × 60 × 24) significa 2 de enero de 1970, 00:00:00 UTC - Una marca de tiempo de
-3600significa 31 de diciembre de 1969, 23:00:00 UTC (las marcas de tiempo negativas representan fechas anteriores al epoch)
La fórmula es simple:
timestamp = seconds since 1970-01-01 00:00:00 UTC
Marcas de tiempo en milisegundos
Muchos sistemas modernos, particularmente JavaScript y las APIs web, usan milisegundos en lugar de segundos. Una marca de tiempo en milisegundos es simplemente el valor en segundos multiplicado por 1000:
Date.now()de JavaScript devuelve milisegundostime.time()de Python devuelve segundos como un flotante con milisegundos fraccionarios
Verifica siempre qué resolución usa un sistema antes de convertir, ya que mezclarlas puede producir fechas desviadas por décadas.
El problema del año 2038
El problema del año 2038 (también llamado el "Bicho del Milenio Unix" o "Y2K38") es un problema de representación del tiempo que afectará a los sistemas que almacenan marcas de tiempo como enteros con signo de 32 bits.
Un entero con signo de 32 bits puede contener valores desde aproximadamente -2,1 mil millones hasta +2,1 mil millones. La marca de tiempo Unix máxima representable es 2147483647, que corresponde a:
- 19 de enero de 2038, 03:14:07 UTC
Un segundo después, el valor se desbordaría a -2147483648, que representa el 13 de diciembre de 1901 — haciendo que los sistemas interpreten la hora actual como una fecha de principios del siglo XX.
¿Qué sistemas se ven afectados?
- Dispositivos integrados y hardware de IoT con procesadores de 32 bits
- Kernels de Linux integrados más antiguos
- Bases de datos heredadas que usan columnas de tiempo de enteros de 32 bits
- Sistemas de archivos y formatos binarios que almacenan el tiempo como enteros de 32 bits
La solución
Los sistemas modernos han realizado mayormente la transición a enteros de 64 bits para el almacenamiento del tiempo. Un entero con signo de 64 bits puede representar tiempos hasta aproximadamente 292 mil millones de años hacia el futuro — efectivamente infinito para cualquier propósito práctico.
- La mayoría de las distribuciones modernas de Linux en hardware de 64 bits ya son seguras
- El kernel de Linux ha usado un time_t de 64 bits en sistemas de 64 bits durante años
- El kernel 5.6+ introdujo soporte para time_t de 64 bits en arquitecturas de 32 bits
- Lenguajes de programación como Python, Go y Java usan enteros de 64 bits internamente
Si mantienes sistemas integrados o software heredado, comprobar el tamaño de tu time_t es un ejercicio que vale la pena hoy.
UTC y la relación con las marcas de tiempo Unix
Las marcas de tiempo Unix son inherentemente independientes de la zona horaria — siempre se refieren a UTC.
¿Qué es UTC?
El Tiempo Universal Coordinado (UTC) es el estándar de tiempo primario por el cual el mundo regula los relojes y el tiempo. Reemplazó al Tiempo Medio de Greenwich (GMT) como estándar internacional y es mantenido por relojes atómicos.
Por qué importa UTC para las marcas de tiempo Unix
- Las marcas de tiempo Unix se definen en UTC, por lo que una marca de tiempo representa el mismo instante a nivel global
- Convertir una marca de tiempo Unix a hora local es puramente una preocupación de la capa de visualización
- No se almacena información de zona horaria en la propia marca de tiempo, lo que mantiene el sistema simple y portable
Este diseño significa que puedes compartir una marca de tiempo Unix con cualquier persona en el mundo y ambas partes pueden convertirla a su propia hora local sin ambigüedad.
Segundos intercalares: la rara excepción
Las marcas de tiempo Unix teóricamente cuentan segundos desde el epoch, pero ignoran los segundos intercalares. Un día con un segundo intercalar añadido sigue teniendo exactamente 86400 segundos en el tiempo Unix. Esto significa que durante un segundo intercalar, la marca de tiempo Unix no avanza, y el segundo intercalar desaparece efectivamente del conteo.
Esta simplificación mantiene el sistema práctico pero significa que las marcas de tiempo Unix divergen ligeramente del tiempo atómico. La discrepancia es lo suficientemente pequeña como para que rara vez importe en aplicaciones cotidianas.
Rangos comunes de marcas de tiempo
| Marca de tiempo | Fecha legible | Significado | |-----------|---------------------|--------------| | 0 | 1970-01-01 00:00:00 UTC | El epoch Unix | | 86400 | 1970-01-02 00:00:00 UTC | Un día después del epoch | | 946684800 | 2000-01-01 00:00:00 UTC | El año 2000 | | 1234567890 | 2009-02-13 23:31:30 UTC | Un patrón memorable | | 1785292800 | 2026-07-19 00:00:00 UTC | El epoch de hoy | | 2147483647 | 2038-01-19 03:14:07 UTC | Máximo de 32 bits |
Resumen
Una marca de tiempo Unix es una forma elegante y portable de representar el tiempo como un solo entero. Su diseño — contar segundos desde el 1 de enero de 1970 UTC — la convierte en el estándar de tiempo universal en sistemas operativos, bases de datos y lenguajes de programación. Si bien el problema de 2038 se cierne sobre los sistemas heredados, la transición en curso al tiempo de 64 bits garantiza que la marca de tiempo Unix seguirá siendo la base del cronometraje informático durante generaciones.
¿Listo para trabajar con marcas de tiempo Unix? Usa nuestro Convertidor de marcas de tiempo Unix para convertir instantáneamente entre marcas de tiempo y fechas legibles.