¿Hay una forma rápida y unívoca de convertir una marca de tiempo de Unix en una fecha desde la línea de comandos de Unix?
date
podría funcionar, excepto que es bastante incómodo especificar cada elemento (mes, día, año, hora, etc.), y no puedo entender cómo hacer que funcione correctamente. Parece que podría haber una manera más fácil: ¿me estoy perdiendo algo?
bash
shell
unix
unix-timestamp
quimeracoder
fuente
fuente
Respuestas:
Con GNU's
date
puedes hacer:(De: BASH: Convertir la marca de tiempo de Unix en una fecha )
En OS X, use
date -r
.Alternativamente, use
strftime()
. No está disponible directamente desde el shell, pero puede acceder a través de gawk . El%c
especificador muestra la marca de tiempo de forma local.fuente
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Donde el número detrás@
es el número en segundosfuente
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) o simplementedate -r 1278999698
Esta solución funciona con versiones de fecha que no son compatibles
date -d @
. No requiere AWK u otros comandos. Una marca de tiempo Unix es el número de segundos desde el 1 de enero de 1970, UTC, por lo que es importante especificar UTC.Si estás en una Mac, usa:
Comando para obtener época:
El crédito va a Anton: BASH: Convertir la marca de tiempo de Unix en una fecha
fuente
Como @TomMcKenzie dice en un comentario a otra respuesta,
date -r 123456789
podría decirse que es una solución simple más común (es decir, más ampliamente implementada) para tiempos dados como segundos desde la época de Unix, pero desafortunadamente no hay una solución portátil universal garantizada.La
-d
opción en muchos tipos de sistemas significa algo completamente diferente a la--date
extensión de GNU Date . Lamentablemente, GNU Date no interpreta-r
lo mismo que estas otras implementaciones. Así que desafortunadamente tienes que saber qué versióndate
estás usando y muchos Unix más antiguosdate
comandos no admiten ninguna de las opciones.Peor aún, POSIX
date
no reconoce ninguno-d
ni-r
proporciona ninguna forma estándar en ningún comando (que yo sepa) para formatear un tiempo Unix desde la línea de comandos (ya que POSIX Awk también carecestrftime()
). (No puedes usartouch -t
yls
porque el primero no acepta un tiempo dado en segundos desde la época de Unix).Tenga en cuenta que The One True Awk disponible directamente de Brian Kernighan ahora tiene la
strftime()
función incorporada, así como unasystime()
función para devolver el tiempo actual en segundos desde la época de Unix), por lo que tal vez la solución Awk sea la más portátil.fuente
Si encuentra la notación incómoda, tal vez la
-R
opción sí ayuda. Expulsa la fecha en formato RFC 2822. Por lo que no necesitará todos esos identificadores:date -d @1278999698 -R
. Otra posibilidad es la de salida de la fecha en cuestión de segundos en su localidad:date -d @1278999698 +%c
. Debería ser fácil de recordar. :-)fuente
Ligera corrección a la respuesta de dabest1 anterior. Especifique la zona horaria como UTC, no GMT:
El segundo es correcto. Creo que la razón es que en el Reino Unido, el horario de verano estuvo en vigor continuamente desde 1968 hasta 1971.
fuente
La solución estándar de Perl es:
(o tiempo local, si lo prefiere)
fuente
fuente
Otros ejemplos aquí son difíciles de recordar. En su forma más simple:
fuente
Ponga lo siguiente en su ~ / .bashrc:
Ejemplo de uso:
fuente
Pitón:
fuente