Convertidor de tiempo Unix Epoch y generador de marcas de tiempo de Discord
Convierta marcas de tiempo de época de Unix en fechas legibles por humanos y viceversa. Genere marcas de tiempo de Discord que se puedan copiar y pegar en tiempo real.
Deslice la línea temporal para comparar visualmente múltiples zonas horarias.
La sincronización de sistemas de bases de datos distribuidas, el registro de eventos de aplicaciones y la depuración de cargas útiles de API requieren un método estandarizado y altamente preciso de seguimiento del tiempo. La estandarización del tiempo de época de Unix proporciona un entero inmutable e independiente de la zona horaria que representa el número exacto de segundos transcurridos desde el 1 de enero de 1970. Esta guía completa detalla la mecánica de las marcas de tiempo de Unix, demuestra métodos de conversión programática en entornos modernos y explica cómo analizar estructuras de tiempo alternativas como los ID de los copos de nieve de Discord.
Comprender la dinámica de la época y la marca de tiempo de Unix
El tiempo Unix (también conocido como época Unix, tiempo POSIX o marca de tiempo Unix) rastrea el progreso cronológico como un entero incremental. Representa el recuento de segundos transcurridos desde el punto de referencia del 1 de enero de 1970, 00:00:00 UTC (representación ISO 8601: 1970-01-01T00:00:00Z). En el momento exacto de esta época, el contador estaba exactamente en 0.
Las marcas de tiempo de época son estrictamente independientes de la zona horaria. El número entero representa un instante universal singular en todo el mundo, y las aplicaciones de clientes locales ajustan la capa de presentación aplicando compensaciones UTC específicas. Para ver cómo funciona el mapeo de zona horaria, compare las interpretaciones locales de la marca de tiempo 1577923200:
| Región de zona horaria | Fecha y hora localizadas | Valor de compensación |
|---|---|---|
| GMT/UTC | Jueves, 2 de enero de 2020, 00:00:00 | UTC+00:00 |
| India (Calcuta) | Jueves, 2 de enero de 2020, 05:30:00 | UTC+05:30 |
| América (Nueva York) | miércoles, 1 de enero de 2020, 19:00:00 | UTC-05:00 |
El tiempo de Unix no tiene en cuenta los segundos intercalares. En lugar de ello, se supone que cada día calendario contiene exactamente 86.400 segundos. Debido a que los segundos intercalares se ignoran en el contador (comparten exactamente el mismo valor de marca de tiempo que el segundo anterior), el tiempo de época de Unix no mantiene una sincronización lineal perfecta con el tiempo universal coordinado (UTC) durante largos períodos geológicos. Para las fechas anteriores al umbral inicial del 1 de enero de 1970, el sistema utiliza valores enteros negativos (por ejemplo, -86400 denota el 31 de diciembre de 1969, 00:00:00 UTC).
Para trabajar con estos números en el modelado de bases de datos o en tareas de trabajadores en segundo plano, los desarrolladores dependen de intervalos cronológicos fijos. La siguiente lista asigna unidades estándar a sus valores exactos en segundos:
- 1 hora: 3600 segundos
- 1 día: 86.400 segundos
- 1 semana: 604.800 segundos
- 1 Mes (Calculado a 30,44 días): 2.629.743 segundos
- 1 año (calculado a 365,24 días): 31.556.926 segundos
Calcular los valores de duración directamente con estos valores facilita el manejo de programaciones cron, la caducidad de tokens JWT o la creación de índices TTL personalizados en bases de datos NoSQL.
Segundos frente a milisegundos: navegación con precisión de dígitos
Las marcas de tiempo en el software moderno se ejecutan con varios niveles de precisión según los requisitos de la aplicación. La mayoría de los diseños de sistemas utilizan una de estas cuatro resoluciones:
- Segundos (formato de 10 dígitos): Por ejemplo,
1735689600. Esta es la resolución estándar utilizada por Python, PHP, bases de datos relacionales (como PostgreSQL y MySQL) y entornos de shell de Linux. - Milisegundos (formato de 13 dígitos): Por ejemplo,
1735689600000. Este formato es estándar en JavaScript, Java y la mayoría de las API web modernas basadas en JSON. - Microsegundos (formato de 16 dígitos): Por ejemplo,
1735689600000000. Normalmente reservado para rastreo de alta precisión, registro del sistema y plataformas de diagnóstico de bajo nivel. - Nanosegundos (formato de 19 dígitos): Se utiliza en sistemas de seguimiento especializados a nivel de kernel y redes de procesamiento en tiempo real.
Para convertir segundos a milisegundos, multiplique el valor entero por 1000. Por el contrario, para transformar milisegundos a segundos estándar, aplique la división de números enteros por 1000 para eliminar los dígitos finales.
Comprender las marcas de tiempo secuenciales y de referencia de Unix proporciona una perspectiva clara sobre la progresión y escala cronológica:
__CÓDIGO_0__ __CÓDIGO_1__ __CÓDIGO_2__ __CÓDIGO_3__ __CÓDIGO_4__ __CÓDIGO_5__
| marca de tiempo Unix | Fecha y hora UTC equivalente | Contexto del hito |
|---|---|---|
| 0 | Jueves 1 de enero de 1970, 00:00:00 UTC | La época Unix |
| 1.000.000.000 | Domingo, 9 de septiembre de 2001, 01:46:40 UTC | El segundo hito número mil millones |
| 1.234.567.890 | Viernes, 13 de febrero de 2009, 23:31:30 UTC | Progresión secuencial de dígitos decimales |
| 1.735.689.600 | Miércoles 1 de enero de 2025, 00:00:00 UTC | Inicio del año 2025 |
| 2.000.000.000 | Martes, 18 de mayo de 2033, 03:33:20 UTC | Segundo hito número dos mil millones |
| 2.147.483.647 | Martes, 19 de enero de 2038, 03:14:07 UTC | El límite máximo absoluto de 32 bits con signo |
El problema del año 2038: por qué fallan los sistemas de 32 bits
Los sistemas heredados, el firmware integrado y los esquemas de bases de datos que almacenan marcas de tiempo de Unix como enteros de 32 bits con signo eventualmente encontrarán un límite de desbordamiento. Un entero de 32 bits con signo solo puede almacenar valores hasta 2,147,483,647. El punto de ruptura exacto ocurre el 19 de enero de 2038, a las 03:14:07 UTC.
En el siguiente tic del reloj del sistema (03:14:08 UTC), el contador de enteros se desborda y regresa a su límite negativo mínimo de -2,147,483,648. Los sistemas que no puedan manejar esta transición interpretarán la fecha como 13 de diciembre de 1901. Esto provocará fallas del sistema, invalidaciones de certificados, errores del sistema de archivos y consultas de bases de datos corruptas.
Métodos programáticos para convertir y generar marcas de tiempo Unix
Para ayudar a los desarrolladores a capturar la hora actual y realizar conversiones, la siguiente tabla describe métodos para recuperar marcas de tiempo de época estándar y convertir un valor genérico (usando 1800000000 como referencia) a horas locales en diferentes idiomas y plataformas.
| Idioma / Plataforma | Época actual (segundos) | Convertir época a fecha |
|---|---|---|
| javascript | Matemáticas.piso(Fecha.ahora() / 1000) | nueva fecha(1800000000 * 1000).toLocaleString() |
| Pitón | int(tiempo.tiempo()) | hora.ctime(1800000000) |
| Java | Instantáneo.now().getEpochSecond() | nuevo SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(nueva Fecha(1800000000L * 1000)) |
| Ir | tiempo.Ahora().Unix() | tiempo.Unix(1800000000, 0) |
| PHP | tiempo() | fecha('r', 1800000000) |
| Rubí | Tiempo.ahora.para_i | Hora.a las(1800000000) |
| DO# | DateTimeOffset.Now.ToUnixTimeSeconds() | DateTimeOffset.FromUnixTimeSeconds(1800000000).LocalDateTime |
| C++ | duración_cast |
— |
| Óxido | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() | — |
| perla | tiempo | hora local escalar(1800000000) |
| PostgreSQL | SELECCIONAR EXTRACTO (ÉPOCA DESDE ahora()); | SELECCIONE TO_TIMESTAMP(1800000000); |
| mysql | SELECCIONE UNIX_TIMESTAMP(AHORA()); | SELECCIONE FROM_UNIXTIME(1800000000); |
| Servidor SQL | SELECCIONE DATEDIFF(SEGUNDO, '1970-01-01', GETUTCDATE()); | SELECCIONAR FECHAADD(SEGUNDO, 1800000000, '1970-01-01'); |
| SQLite | SELECCIONE unixepoch(); | SELECCIONE fecha y hora (1800000000, 'unixepoch'); |
| Shell Unix/Linux | fecha +%s | fecha -ud @1800000000 |
| macos | fecha +%s | fecha -j -r 1800000000 |
| PowerShell | [DateTimeOffset]::Ahora.ToUnixTimeSeconds() | [DateTimeOffset]::FromUnixTimeSeconds(1800000000).LocalDateTime |
| Excel/Hojas | — | =(A1/86400) + 25569 |
Generadores de marcas de tiempo de copos de nieve de Discord y épocas personalizadas
Las diferentes arquitecturas utilizan épocas de referencia especializadas y resoluciones incrementales según las plataformas de hardware, las bases de datos o las especificaciones de la aplicación. Algunos de estos formatos incluyen:
- Marca de tiempo LDAP: Cuenta en bloques de 100 nanosegundos a partir del 1 de enero de 1601.
- .NET DateTime Ticks: Cuenta en bloques de 100 nanosegundos a partir del año gregoriano 1.
- Marca de tiempo de Chrome/WebKit: Cuenta en microsegundos a partir del 1 de enero de 1601.
- Mac HFS+: Cuenta en segundos a partir del 1 de enero de 1904.
- Marca de tiempo NTP: Cuenta en segundos a partir del 1 de enero de 1900.
- Tiempo GPS: Cuenta en segundos y semanas a partir del 6 de enero de 1980.
- Marca de tiempo SAS: Cuenta en segundos o días a partir del 1 de enero de 1960.
- Datos básicos de cacao: Cuenta en segundos a partir del 1 de enero de 2001.
- Excel OADate: Cuenta en días fraccionarios a partir del 1 de enero de 1900.
- Marca de tiempo FAT: Cuenta en segundos a partir de 1980 o 2000.
- Día Julián: Mide el progreso cronológico en días desde antiguos puntos de referencia astronómicos.
- Snowflake ID: Un formato de indexación de marca de tiempo descentralizado utilizado por Discord y Twitter (X).
Comprender las marcas de tiempo de Discord y las identificaciones de copos de nieve
Discord genera enteros únicos y descentralizados de 64 bits sin signo (ID de copo de nieve) para identificar objetos como mensajes, canales, servidores y usuarios. A diferencia de los números enteros incrementales estándar o los UUID de alta sobrecarga, un copo de nieve de Discord incorpora el tiempo de creación exacto dentro del propio ID, lo que ayuda con el rendimiento en sistemas distribuidos.
La estructura de una identificación de copo de nieve de Discord se divide en cuatro componentes distintos:
- Marca de tiempo (42 bits): Representa los milisegundos transcurridos desde la época personalizada de Discord (establecida en el 1 de enero de 2015, a las 00:00:00 UTC, equivalente a la marca de tiempo de Unix
1420070400000). - ID de trabajador (5 bits): Representa el índice de trabajador interno del servidor.
- ID de proceso (5 bits): Representa el índice del proceso interno.
- Incremento (12 bits): Un contador secuencial que se reinicia a 0 cada milisegundo por proceso.
Para mostrar fechas legibles en mensajes de Discord que se ajustan automáticamente a la zona horaria local del usuario que los ve, los desarrolladores utilizan generadores de marcas de tiempo de Discord. Al ingresar una marca de tiempo estándar de Unix en estos generadores se produce una cadena de rebajas formateada. La siguiente tabla enumera los formatos de estilo disponibles:
__CÓDIGO_0__ __CÓDIGO_1__ __CÓDIGO_2__ __CÓDIGO_3__ __CÓDIGO_4__ __CÓDIGO_5__ __CÓDIGO_6__ __CÓDIGO_7__
| Sintaxis de rebajas | Salida de ejemplo (para Unix 1735689600) |
Descripción del estilo de visualización |
|---|---|---|
<t:1735689600:t> |
00:00 | Poco tiempo |
<t:1735689600:T> |
00:00:00 | mucho tiempo |
<t:1735689600:d> |
01/01/2025 | cita corta |
<t:1735689600:D> |
1 de enero de 2025 | cita larga |
<t:1735689600:f> |
1 de enero de 2025 00:00 | Fecha/Hora corta |
<t:1735689600:F> |
miércoles, 1 de enero de 2025 00:00 | Fecha/hora larga |
<t:1735689600:R> |
en 5 años / hace 5 años | Tiempo relativo |
Optimización de los flujos de trabajo de tiempo en sistemas distribuidos
La gestión de cálculos de tiempo dentro de sistemas distribuidos modernos requiere un enfoque estandarizado para evitar desviaciones de zona horaria, errores en el tamaño de la carga útil y fallas por desbordamiento. La estandarización de las estructuras de bases de datos en la época estándar de Unix simplifica las tareas de manipulación del tiempo, garantizando operaciones consistentes entre microservicios e interfaces externas.
Al diseñar API o configurar colas de mensajes, tenga en cuenta estas tres pautas:
- Almacenar la hora en formato UTC o entero de época: Mantenga las capas de persistencia limpias de compensaciones de zona horaria local. Aplique localizaciones exclusivamente en la capa de presentación.
- Priorice la representación de 64 bits: Al diseñar columnas de bases de datos o seleccionar estructuras de programación, migre lejos de los tipos de 32 bits para evitar desbordamientos del tiempo de ejecución del año 2038.
- Elija la precisión adecuada: Haga coincidir las especificaciones del sistema (por ejemplo, usando milisegundos para eventos API y nanosegundos solo cuando se rastrean adquisiciones de bloqueos distribuidos).
Al convertir marcas de tiempo o verificar épocas mediante utilidades del navegador, la seguridad y la privacidad son primordiales. La herramienta de conversión de Toolsaur implementa esta filosofía directamente: "Todo el procesamiento se ejecuta localmente en su navegador. Sus datos nunca se envían a nuestros servidores". Esto garantiza que los registros confidenciales del sistema que contienen marcas de tiempo de bases de datos nunca se filtren a puntos finales de terceros.
Preguntas frecuentes sobre convertidores de época
¿Por qué las marcas de tiempo de Unix son independientes de la zona horaria?
Las marcas de tiempo de Unix representan el tiempo absoluto transcurrido desde un único punto de referencia global (1 de enero de 1970, a las 00:00:00 UTC). Debido a que este punto de partida de referencia es idéntico independientemente de la ubicación geográfica, el número entero de marca de tiempo calculado sigue siendo el mismo. El ajuste de la zona horaria local solo se aplica cuando se formatea la marca de tiempo en una cadena de fecha legible por humanos dentro de las interfaces del cliente.
¿Cuál es la diferencia entre una marca de tiempo de 10 y 13 dígitos?
Una marca de tiempo de 10 dígitos representa la precisión en segundos (por ejemplo, 1735689600), lo cual es típico de los sistemas operativos POSIX, Python y bases de datos SQL. Una marca de tiempo de 13 dígitos representa la precisión en milisegundos (por ejemplo, 1735689600000), que es estándar para los tiempos de ejecución de JavaScript, Java y las API REST modernas. Moverse entre ellos requiere multiplicar o dividir por 1000.
¿Cómo afectará el problema del año 2038 a las bases de datos modernas?
Si una columna de base de datos almacena marcas de tiempo de Unix utilizando un tipo de datos entero de 32 bits con signo (como INT en esquemas de bases de datos más antiguos), cualquier registro con una marca de tiempo posterior al 19 de enero de 2038 a las 03:14:07 UTC provocará un desbordamiento. Esto ajusta el número a un valor negativo, interpretando fechas futuras como el 13 de diciembre de 1901. Los sistemas deben migrar estas columnas a enteros de 64 bits con signo (BIGINT).
¿Cómo maneja el tiempo Unix los segundos intercalares?
El tiempo Unix no tiene en cuenta los segundos intercalares y supone que cada día tiene exactamente 86.400 segundos. Cuando ocurre un segundo intercalar, la marca de tiempo de Unix se repite o se detiene por un segundo. Esta elección de diseño simplifica los cálculos matemáticos, pero provoca desviaciones menores en las líneas de tiempo exactas del Tiempo Universal Coordinado (UTC).
¿Qué es un ID de copo de nieve de Discord y en qué se diferencia de una marca de tiempo estándar de Unix?
Un ID de copo de nieve de Discord es un entero personalizado de 64 bits sin signo que codifica una marca de tiempo de creación junto con los metadatos de la arquitectura del servidor (ID de trabajador, ID de proceso y un incremento local). A diferencia de una marca de tiempo estándar de Unix de 10 dígitos en segundos, una identificación de copo de nieve utiliza una época personalizada que comienza el 1 de enero de 2015 y rastrea los intervalos en milisegundos, almacenando este tiempo de alta precisión en los primeros 42 bits de la identificación.
¿Cómo se puede convertir una marca de tiempo de época en Microsoft Excel?
Excel rastrea las fechas como la cantidad de días transcurridos desde el 1 de enero de 1900. Para convertir una marca de tiempo Unix estándar de 10 dígitos (segundos) en la celda A1 a una fecha legible en Excel, aplique la fórmula =(A1 / 86400) + 25569, donde 86400 es la cantidad de segundos en un día y 25569 es el desplazamiento en días entre la época de Excel y la época de Unix. Establezca el formato de la celda en "Fecha" u "Hora" para ver el resultado.