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.
Cómo usar De ID snowflake a fecha
- 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.
- Elige el formato: Discord, X/Twitter, Instagram, Mastodon, Sonyflake o Personalizado. Los enlaces de Discord y x.com cambian el formato automáticamente.
- 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.
- Descodifica varios a la vez pegando un ID por línea; obtienes una tabla, el tiempo entre ID y una descarga en CSV.
- 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 | Época | Marca de tiempo | Bits inferiores | Fórmula de la fecha |
|---|---|---|---|---|
| Discord | 1420070400000 ms (2015-01-01 00:00:00 UTC) | 42 bits, ms | 5 worker · 5 proceso · 12 incremento | (id >> 22) + 1420070400000 |
| X / Twitter | 1288834974657 ms (2010-11-04 01:42:54.657 UTC) | 41 bits, ms | 5 centro de datos · 5 worker · 12 secuencia | (id >> 22) + 1288834974657 |
| 1314220021721 ms (2011-08-24 21:07:01.721 UTC) | 41 bits, ms | 13 shard · 10 secuencia | (id >> 23) + 1314220021721 | |
| Mastodon | Época Unix (1970-01-01) | 48 bits, ms | 16 bits de hash + secuencia | id >> 16 |
| Sonyflake | 2014-09-01 00:00:00 UTC | 39 bits, unidades de 10 ms | 8 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.
- Marca de tiempo:
175928847299117063 >> 22 = 41944705796ms desde la época de Discord. Suma 1420070400000 para obtener el tiempo Unix 1462015105796 ms = 2016-04-30 11:18:25.796 UTC. - ID de worker interno:
(id & 0x3E0000) >> 17 = 1. - ID de proceso interno:
(id & 0x1F000) >> 12 = 0. - 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.
| Lenguaje | De ID de Discord a fecha |
|---|---|
| JavaScript | new Date(Number((BigInt(id) >> 22n) + 1420070400000n)) |
| Python | datetime.fromtimestamp(((int(id) >> 22) + 1420070400000) / 1000, tz=timezone.utc) |
| SQL (PostgreSQL) | to_timestamp(((id >> 22) + 1420070400000) / 1000.0) |
| Excel / Sheets | Los 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.