Preguntas frecuentes sobre timestamps Unix

Respuestas rápidas a las preguntas más comunes sobre timestamps Unix — unidades, manejo de zonas horarias, el problema del año 2038, conversiones específicas de cada lenguaje y más.

Preguntas frecuentes

¿Qué es un timestamp Unix?
Un timestamp Unix es el número de segundos transcurridos desde el epoch Unix — el 1 de enero de 1970 a las 00:00:00 UTC. Es un entero neutral al lenguaje e independiente de la zona horaria que identifica de forma única cualquier momento en el tiempo.
¿Qué es el epoch Unix?
El epoch Unix es el 1 de enero de 1970 a las 00:00:00 UTC. Todos los timestamps Unix se miden hacia adelante —o hacia atrás en el caso de valores negativos— desde este punto de referencia fijo. La elección de 1970 fue práctica: era un año reciente y redondo cuando se diseñaba Unix en Bell Labs.
¿Cuál es la diferencia entre un timestamp de 10 y de 13 dígitos?
Un timestamp de 10 dígitos (p. ej. 1700000000) representa segundos desde el epoch. Uno de 13 dígitos (p. ej. 1700000000000) representa milisegundos. Date.now() de JavaScript devuelve milisegundos; la mayoría de las llamadas del sistema Unix y lenguajes como Python, Go y PHP devuelven segundos por defecto.
¿Por qué JavaScript usa milisegundos en lugar de segundos?
La API Date de JavaScript se diseñó para coincidir con la resolución de los temporizadores del sistema disponibles en 1995. Usar milisegundos evita la pérdida de precisión para duraciones de menos de un segundo. Al trabajar con timestamps Unix en segundos generados por el servidor, multiplica por 1000 antes de pasarlos a new Date().
¿Cómo convierto un timestamp Unix en una fecha legible en JavaScript?
Para un timestamp en segundos: new Date(1700000000 * 1000).toISOString(). Para uno en milisegundos: new Date(1700000000000).toISOString(). Ambos producen cadenas ISO 8601 como '2023-11-15T06:13:20.000Z'. Usa toLocaleString() con una opción timeZone para una visualización localizada.
¿Los timestamps Unix tienen en cuenta la zona horaria?
No. Un timestamp Unix siempre representa un único momento en UTC. La información de zona horaria solo se aplica al formatear el timestamp para mostrarlo. Dos dispositivos en zonas horarias distintas producirán el mismo timestamp Unix para el mismo instante.
¿Qué es el problema del año 2038?
Los sistemas que almacenan timestamps Unix como enteros con signo de 32 bits solo pueden representar valores hasta 2.147.483.647, que corresponde al 19 de enero de 2038 a las 03:14:07 UTC. Después de ese momento el entero se desborda a un número negativo grande. Los sistemas modernos de 64 bits no se ven afectados, pero los sistemas embebidos y las bases de datos heredadas pueden seguir en riesgo.
¿Qué es un timestamp Unix negativo?
Un timestamp Unix negativo representa un momento anterior al epoch Unix. Por ejemplo, -86400 es el 31 de diciembre de 1969 a las 00:00:00 UTC. La mayoría de las APIs de fecha modernas manejan correctamente los timestamps negativos, pero algunos sistemas y bases de datos más antiguos no los admiten.
¿Cómo obtengo un timestamp Unix en Python?
Usa import time; int(time.time()) para segundos. Para un datetime UTC explícito: import datetime; int(datetime.datetime.now(datetime.timezone.utc).timestamp()). Para milisegundos: int(time.time() * 1000).
¿Qué precisión tiene un timestamp Unix?
Un timestamp Unix estándar tiene precisión de un segundo. Para precisión de menos de un segundo, los timestamps en milisegundos (13 dígitos) son comunes en las APIs web y en JavaScript. Algunos sistemas usan microsegundos (16 dígitos) o nanosegundos. La unidad adecuada depende de la precisión que tu aplicación realmente necesite.