date -d @1787043600 imprime la fecha de una marca de tiempo, y date -u -d '2026-08-18 09:00:00' +%s hace el camino inverso. Dos detalles deciden si te funcionará: macOS usa -r en lugar de -d @, y una marca en milisegundos hay que dividirla entre 1000 o date la rechaza sin más.
1. De marca de tiempo a fecha
$ clai convierte 1787043600 a fecha→ date -d @1787043600Tue Aug 18 09:00:00 UTC 2026
La @ delante del número es obligatoria: le dice a date que son segundos desde 1970 y no una cadena de fecha. El resultado sale en la zona horaria de la máquina.
2. Explícitamente en UTC
$ clai muestra 1787043600 en UTC→ date -u -d @1787043600Tue Aug 18 09:00:00 UTC 2026
-u fija la salida en UTC sin importar cómo esté configurada la máquina. En un hilo de incidencia es la única forma de dejar de discutir de quién era esa hora.
3. En una zona horaria concreta
$ clai muestra esa hora en Berlín→ TZ=Europe/Berlin date -d @1787043600Tue Aug 18 11:00:00 CEST 2026
Un TZ delante del comando afecta solo a ese comando. Usa nombres IANA (Europe/Berlin, America/New_York) en vez de abreviaturas como CEST, que son ambiguas.
4. De vuelta: de fecha a marca
$ clai convierte el 18 de agosto de 2026 09:00 UTC a tiempo unix→ date -u -d '2026-08-18 09:00:00' +%s1787043600
+%s es el formato de salida "segundos desde la época". Sin -u, la cadena se interpreta en la zona de la máquina y sale otro número.
5. En ISO 8601
$ clai imprime la marca en formato ISO→ date -u -Is -d @17870436002026-08-18T09:00:00+00:00
-Is abrevia --iso-8601=seconds. Casi cualquier lenguaje de programación interpreta este formato sin esfuerzo adicional.
6. Una marca en milisegundos
$ clai convierte la marca en milisegundos 1787043600123→ ms=1787043600123; date -u -d @$((ms/1000)) +"%F %T.$((ms%1000))"2026-08-18 09:00:00.123
JavaScript, Java y la mayoría de las API te dan milisegundos. La división entera da los segundos y el resto aporta la parte fraccionaria que date no produce por su cuenta.
Gotchas
- date no entiende milisegundos. Verificado:
date -u -d @1787043600123respondedate: invalid date '@1787043600123'. El número no viene del futuro lejano, es 2026 multiplicado por mil. - macOS usa otro flag. GNU:
date -d @1787043600. BSD y macOS:date -r 1787043600. Un script escrito en Linux imprime la fecha de hoy o falla en un Mac: instalacoreutilsde Homebrew y llama agdatesi quieres una sintaxis única. - Sin
-uconviertes a la zona horaria de otro. La misma marca en un servidor en UTC y en un portátil en Berlín se separa dos horas, como arriba. En informes de incidencias fija siempre la zona.
Related questions
¿Cómo obtengo la marca actual? date +%s. Para milisegundos, GNU tiene date +%s%3N; BSD no tiene ese formato.
¿Cómo calculo la diferencia entre dos fechas? Convierte ambas a segundos y resta: entre el 11 y el 18 de agosto de 2026 son 604800 segundos, exactamente una semana.
¿Qué es el problema del año 2038? Un campo de segundos de 32 bits con signo se desborda el 19 de enero de 2038. En sistemas de 64 bits y lenguajes modernos está resuelto, pero aún aparece en formatos binarios antiguos.
See also
- sed -i no funciona en macOS
- journalctl: los logs de un servicio
- Contar apariciones en un log: grep -c no es la respuesta
CliAI convierte "qué hora era 1787043600" en el flag correcto para tu sistema y lo muestra antes de ejecutarlo. Instálalo en una línea.