WikiPlus

Depurar timestamps en logs de servidor y respuestas de API

Los desarrolladores backend encuentran timestamps Unix constantemente: en líneas de log de aplicaciones, en campos de respuesta de APIs REST, en headers HTTP, en el payload de tokens JWT y en consultas de bases de datos. Leer '1716000000' en un log y saber instantáneamente que corresponde a mayo de 2024 requiere una conversión mental que nadie hace de forma fiable. El Conversor de Timestamps de WikiPlus convierte cualquier número epoch a una fecha comprensible en menos de un segundo, directamente en el navegador sin necesidad de acceso a herramientas de desarrollo.

Timestamps en logs de aplicaciones y cómo interpretarlos

Los sistemas de logging como Log4j, Winston, Serilog y la mayoría de frameworks web generan timestamps en ISO 8601 o en epoch Unix dependiendo de la configuración. Los logs de Nginx, Apache y sistemas de archivos de Linux suelen incluir timestamps en formato humano, pero muchos sistemas de logging en JSON como el que usa ELK Stack o Datadog almacenan el tiempo como un número epoch en milisegundos para facilitar el ordenado y la indexación. Cuando encuentras un campo como 'timestamp: 1716234567890' en un log, pegar ese número en el conversor te dice inmediatamente en qué fecha y hora ocurrió el evento que lo generó.

Tokens JWT y sus campos de timestamp: exp, iat y nbf

Los tokens JWT (JSON Web Tokens) usan tres campos de timestamp en su payload: 'iat' (issued at, emitido en), 'exp' (expiration, caducidad) y 'nbf' (not before, no válido antes de). Todos se expresan en segundos Unix. Cuando depuras un error de token caducado o un token que no se acepta como válido, convertir el campo 'exp' a fecha legible inmediatamente te dice si el token ya caducó y cuándo. El conversor es especialmente útil para verificar si la diferencia entre 'iat' y 'exp' corresponde a la vida útil configurada del token (por ejemplo, 3600 segundos para tokens de 1 hora). Puedes decodificar la parte del payload del JWT (que está en Base64url) con la herramienta de Base64 de WikiPlus y luego convertir los timestamps con esta herramienta.

Timestamps en bases de datos: UNIX_TIMESTAMP, created_at y ObjectId de MongoDB

Los campos de timestamp son ubicuos en bases de datos relacionales y NoSQL. MySQL tiene la función UNIX_TIMESTAMP() que retorna segundos Unix. PostgreSQL usa TIMESTAMP WITH TIME ZONE y la función EXTRACT(EPOCH FROM timestamp) para obtener el valor epoch. MongoDB embebe timestamps en los ObjectId: los primeros 4 bytes del ObjectId de MongoDB contienen el timestamp Unix en segundos de cuando se creó el documento. Para extraer la fecha de un ObjectId de MongoDB, conviértelo de hexadecimal a decimal (los primeros 8 caracteres hex = 4 bytes = timestamp Unix en segundos) y pégalo en el conversor. El conversor admite también valores del tipo AWS CloudWatch timestamps que usan milisegundos.

Calcular diferencias de tiempo entre dos timestamps

Para calcular la duración entre dos eventos registrados con timestamps Unix, resta el timestamp más antiguo del más reciente. El resultado en segundos se puede convertir a una duración comprensible: divide entre 60 para obtener minutos, entre 3600 para horas, entre 86400 para días. Por ejemplo, si un proceso comenzó con timestamp 1716000000 y terminó con 1716003600, la diferencia es 3600 segundos = 1 hora exacta. Para diferencias en milisegundos, la misma lógica aplica dividiendo entre 1000 primero para obtener segundos. Esta operación es habitual al calcular tiempos de respuesta de APIs, duración de transacciones de base de datos o intervalos entre eventos en sistemas distribuidos.

Preguntas frecuentes

¿Cómo convierto el timestamp de un ObjectId de MongoDB a fecha?
Los primeros 8 caracteres hexadecimales de un ObjectId de MongoDB representan el timestamp Unix en segundos. Por ejemplo, para el ObjectId '507f1f77bcf86cd799439011', toma '507f1f77' y conviértelo de hexadecimal a decimal: 1350906231. Pega 1350906231 en el conversor y obtienes la fecha de creación del documento. Esta técnica funciona para todos los ObjectIds de MongoDB sin necesidad de acceso a la base de datos.
¿Por qué los timestamps de mi API difieren de mi zona horaria local?
Los timestamps Unix son intrísecamente UTC: representan un instante absoluto sin zona horaria. La diferencia que ves es el offset entre UTC y tu zona horaria local. Si estás en CEST (UTC+2 en verano), los timestamps UTC se muestran 2 horas adelantados respecto a tu hora local. El conversor muestra siempre tanto la representación UTC como la hora local para que puedas verificar ambas.
¿Puedo convertir fechas de sistemas con timestamps en microsegundos (16 dígitos)?
Sí. El conversor detecta automáticamente timestamps de 16 dígitos como microsegundos y divide entre 1000 para obtener el timestamp en milisegundos antes de la conversión final a fecha. Los timestamps de 19 dígitos en nanosegundos también se manejan dividiendo entre 1.000.000. Estos formatos aparecen en sistemas de alta frecuencia, bases de datos como PostgreSQL TIMESTAMPTZ y logs de hardware.