¿Qué es un timestamp Unix?
Un timestamp Unix (también llamado tiempo Unix, tiempo POSIX o tiempo de época) es un único número entero que representa los segundos transcurridos desde la medianoche del 1 de enero de 1970 en UTC. Ese instante se conoce como la época Unix.
Ahora mismo, el timestamp Unix ronda los 1.746.000.000 y crece en 1 cada segundo. Los números negativos representan momentos anteriores a 1970.
¿Por qué el 1 de enero de 1970?
Cuando se estaba desarrollando Unix en los laboratorios Bell a finales de los años sesenta, el equipo necesitaba un punto de referencia universal para representar el tiempo. 1970 era simplemente una fecha redonda y reciente. La elección tenía además un punto práctico: dejaba casi todas las fechas que iba a manejar el sistema como enteros positivos pequeños, baratos de guardar y de comparar.
No hay nada especial en 1970: fue una convención que se convirtió en estándar porque Unix se extendió por todas partes.
Por qué un solo número resulta tan útil
**Es independiente del huso horario.** Un timestamp Unix representa un instante único y sin ambigüedad. Si guardas un timestamp en una base de datos y lo consultas desde otro huso horario, el número no cambia: solo cambia su conversión a formato legible.
**Es fácil de comparar.** Comparar dos timestamps es comparar dos enteros. Calcular la diferencia entre dos momentos es una resta.
**Vale para cualquier lenguaje.** Todos los lenguajes traen funciones para convertir entre timestamps y fechas legibles. El timestamp 1714000000 significa exactamente lo mismo en Python, JavaScript, Go y SQL.
**No hay líos con el horario de verano.** Los cambios de hora hacen que ciertas horas se repitan (las 2:30 pueden darse dos veces el día que se atrasan los relojes). Un timestamp no tiene esa ambigüedad.
Convertir timestamps
En JavaScript: new Date(1714000000 * 1000). Fíjate en la multiplicación por 1000, porque el objeto Date de JavaScript trabaja en milisegundos y los timestamps Unix van en segundos.
En Python: datetime.fromtimestamp(1714000000)
En SQL: FROM_UNIXTIME(1714000000) en MySQL o to_timestamp(1714000000) en PostgreSQL.
Un fallo clásico: olvidarse del ×1000 en JavaScript. Si una fecha aparece como "1 de enero de 1970", has pasado segundos donde se esperaban milisegundos.
El problema del año 2038
Un entero con signo de 32 bits llega como máximo a 2.147.483.647, que corresponde al 19 de enero de 2038 a las 03:14:07 UTC. Los sistemas que guardan los timestamps en 32 bits se desbordarán ese día, darán la vuelta a un número negativo grande y lo interpretarán como el 13 de diciembre de 1901.
Los sistemas modernos de 64 bits usan enteros de 64 bits, que aguantan hasta aproximadamente el año 292.000 millones, así que no hay prisa. El problema de 2038 afecta a sistemas empotrados antiguos y a software viejo que no se ha actualizado para usar valores de tiempo de 64 bits.
Timestamps en milisegundos y nanosegundos
Muchas API modernas usan timestamps en milisegundos (multiplicados por 1.000) o en nanosegundos (por 1.000.000.000) para ganar precisión. El Date.now() de JavaScript devuelve milisegundos y el time.Now().UnixNano() de Go, nanosegundos. Comprueba siempre las unidades al trabajar con una API nueva: un error de un factor 1000 hará que todas las fechas aparezcan en 1970.
Trabajar con timestamps en la práctica
El conversor de timestamp Unix a fecha de NoxaKit funciona en los dos sentidos: pega un timestamp y verás la fecha legible en tu huso horario y en UTC, o escribe una fecha y obtendrás el timestamp correspondiente. Muy útil al depurar respuestas de API, archivos de registro o registros de base de datos que guardan las fechas como números enteros.