Inicio › Fecha y hora › De ID snowflake a fecha

De ID snowflake a fecha

Los ID snowflake esconden el milisegundo exacto en que se crearon. Pega un ID de usuario, servidor o mensaje de Discord, el ID o enlace de un post de X/Twitter, o cualquier snowflake personalizado para ver su fecha de creación, los ID de worker y de proceso y el número de secuencia, o convierte una fecha en el rango de ID correspondiente.

Última actualización:

De ID snowflake a fecha

De fecha a snowflake

Obtén el ID más pequeño y el más grande posibles para un momento dado, por ejemplo para paginar una API o filtrar mensajes antes o después de una fecha. Usa el formato de ID seleccionado en el descodificador.

Publicidad
Publicidad

Cómo usar De ID snowflake a fecha

  1. Pega un ID (por ejemplo, un ID de usuario de Discord copiado con el Modo desarrollador o el ID de un post de un enlace de x.com) en el cuadro. Los enlaces también funcionan.
  2. Elige el formato: Discord, X/Twitter, Instagram, Mastodon, Sonyflake o Personalizado. Los enlaces de Discord y x.com cambian el formato automáticamente.
  3. Lee la hora de creación en tu hora local o en UTC, con los campos de worker, proceso y secuencia y la estructura de bits debajo.
  4. Descodifica varios a la vez pegando un ID por línea; obtienes una tabla, el tiempo entre ID y una descarga en CSV.
  5. Haz el camino inverso con De fecha a snowflake: elige una fecha para obtener el ID más pequeño y el más grande creados en ese milisegundo.

Comparación de formatos de ID snowflake

Todo snowflake guarda una marca de tiempo en sus bits más altos, así que un ID mayor siempre significa una fecha de creación posterior. Lo que cambia de un sistema a otro es la época (el tiempo cero) y cómo se reparten los bits inferiores restantes.

SistemaÉpocaMarca de tiempoBits inferioresFórmula de la fecha
Discord1420070400000 ms (2015-01-01 00:00:00 UTC)42 bits, ms5 worker · 5 proceso · 12 incremento(id >> 22) + 1420070400000
X / Twitter1288834974657 ms (2010-11-04 01:42:54.657 UTC)41 bits, ms5 centro de datos · 5 worker · 12 secuencia(id >> 22) + 1288834974657
Instagram1314220021721 ms (2011-08-24 21:07:01.721 UTC)41 bits, ms13 shard · 10 secuencia(id >> 23) + 1314220021721
MastodonÉpoca Unix (1970-01-01)48 bits, ms16 bits de hash + secuenciaid >> 16
Sonyflake2014-09-01 00:00:00 UTC39 bits, unidades de 10 ms8 secuencia · 16 máquina(id >> 24) × 10 + 1409529600000

Ejemplo práctico: descodificar un ID de Discord a mano

Toma el ID 175928847299117063 de la propia documentación de Discord.

  1. Marca de tiempo: 175928847299117063 >> 22 = 41944705796 ms desde la época de Discord. Suma 1420070400000 para obtener el tiempo Unix 1462015105796 ms = 2016-04-30 11:18:25.796 UTC.
  2. ID de worker interno: (id & 0x3E0000) >> 17 = 1.
  3. ID de proceso interno: (id & 0x1F000) >> 12 = 0.
  4. Incremento: id & 0xFFF = 7: fue el octavo ID que generó ese proceso en ese milisegundo.

Los mismos pasos en código. Usa enteros de 64 bits: los números de JavaScript pierden precisión por encima de 253, así que usa BigInt.

LenguajeDe ID de Discord a fecha
JavaScriptnew Date(Number((BigInt(id) >> 22n) + 1420070400000n))
Pythondatetime.fromtimestamp(((int(id) >> 22) + 1420070400000) / 1000, tz=timezone.utc)
SQL (PostgreSQL)to_timestamp(((id >> 22) + 1420070400000) / 1000.0)
Excel / SheetsLos desplazamientos de bits no son exactos con números de 18 dígitos en las hojas de cálculo; descodifica aquí y pega el tiempo Unix.

Consejos

  • Ordenación: los snowflakes se ordenan por tiempo, así que ordenar por ID es lo mismo que ordenar por fecha de creación (al milisegundo).
  • Pérdida de precisión: si un ID termina en varios ceros tras pasar por una hoja de cálculo o un analizador JSON, se redondeó a un número de coma flotante de 53 bits y los campos inferiores ya no son fiables. Guarda los ID como cadenas.
  • Límites de la marca de tiempo: una marca de tiempo de 41 bits en milisegundos dura unos 69.7 años desde su época (la de Twitter se agota hacia 2080); los 42 bits de Discord duran unos 139 años.

Preguntas frecuentes

¿Cómo convierto un ID de Discord en una fecha?

Desplaza el ID 22 bits a la derecha y suma la época de Discord, 1420070400000 ms (2015-01-01 00:00:00 UTC). El resultado es el tiempo Unix en milisegundos. Por ejemplo, 175928847299117063 >> 22 = 41944705796, y sumando la época da 1462015105796 ms, que es 2016-04-30 11:18:25.796 UTC. Esta herramienta hace ese cálculo por ti.

¿Qué es un ID snowflake?

Un snowflake es un ID único de 64 bits ordenable por tiempo, diseñado por Twitter en 2010. Los bits superiores guardan una marca de tiempo contada desde una época personalizada, y los inferiores guardan qué máquina o proceso lo generó y un número de secuencia por milisegundo, para que muchos servidores puedan crear ID únicos sin coordinarse.

¿Cómo encuentro el ID de un usuario, servidor o mensaje de Discord?

En Discord, activa Ajustes > Avanzado > Modo desarrollador y luego haz clic derecho (o mantén pulsado) sobre un usuario, servidor, canal o mensaje y elige Copiar ID. También puedes pegar el enlace de un mensaje (discord.com/channels/servidor/canal/mensaje): la herramienta descodifica los tres ID y los etiqueta.

¿Cuál es la diferencia entre los snowflakes de Discord y de Twitter?

Ambos usan 22 bits inferiores (5 + 5 + 12) para worker/centro de datos, proceso y secuencia, pero las épocas son distintas: Discord cuenta desde 2015-01-01 UTC y X/Twitter desde 1288834974657 ms (2010-11-04 01:42:54.657 UTC). Descodificar un ID de Discord con la época de Twitter da una fecha unos cuatro años anterior.

¿Por qué la fecha descodificada parece incorrecta o está en el futuro?

Probablemente el ID se creó con otra época u otra estructura de bits. Abre "El mismo ID en otros formatos" para ver cómo lo interpreta cada formato, o usa Personalizado con la época y los anchos de bits del sistema que lo creó. Asegúrate también de haber copiado el número completo; los números muy cortos dan fechas justo después de la época.

¿Puedo obtener el ID de una fecha concreta?

Sí. De fecha a snowflake da el ID más pequeño (todos los bits inferiores a cero) y el más grande para ese milisegundo. La API de Discord acepta esos valores en los parámetros before/after/around, que es una forma habitual de obtener mensajes a partir de un momento dado.

¿La fecha de creación de una cuenta de Discord es exacta?

Sí, al milisegundo. El ID de usuario de Discord se crea cuando se registra la cuenta, así que al descodificarlo obtienes la fecha de creación de la cuenta. Los ID de servidores y canales dan su fecha de creación, y el ID de un mensaje da el momento en que se envió.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Calculadoras de horas →