Necesito un comando de shell o script que convierta una marca de tiempo de Unix en una fecha. La entrada puede provenir del primer parámetro o de stdin, lo que permite los siguientes patrones de uso:
ts2date 1267619929
y
echo 1267619929 | ts2date
Ambos comandos deberían mostrar "Mié Mar 3 13:38:49 2010".
bash
date
unix-timestamp
chiborg
fuente
fuente
date -d @$(date -u +%s)
@
? No veo eso en la página de manual de GNU en absoluto.brew install coreutils; gdate -d @1267619929
info 'Date input formats'
lo lleva directamente aldate
nodo de información de formato, con la cita pertinente de Robert Grudin, y luego a un menú de especificadores de formato.funciona para mí en Mac OS X.
fuente
Esta versión es similar a la respuesta de chiborg , pero elimina la necesidad de lo externo
tty
ycat
. Utilizadate
, pero podría usarlo con la misma facilidadgawk
. Puede cambiar el shebang y reemplazar los corchetes dobles por uno solo y esto también se ejecutarásh
.fuente
gawk
es (aproximadamente) un 15% más rápido quedate
en unfor
bucle temporizado que consiste sologawk 'BEGIN { print strftime("%c", 1256571985); }'
odate -d '@1256571985' +%c
con salida redirigida a/dev/null
.Puede usar la fecha GNU, por ejemplo,
o
fuente
Puedes usar este simple script awk:
Uso de la muestra:
fuente
date -s @
no funciona, ¡yawk
todavía lo hace! Un ejemplo sin un stdin también sería útil.Desde Bash 4.2 puedes usar
printf
el%(datefmt)T
formato de:Eso es bueno, porque es una concha incorporada. El formato para datefmt es una cadena aceptada por
strftime(3)
(verman 3 strftime
). Aqui%c
esta:Ahora, si desea un script que acepte un argumento y, si no se proporciona ninguno, lea stdin, puede proceder como:
fuente
Lo uso al convertir archivos de registro o monitorearlos:
fuente
awk '{ printf strftime("%c: ", $1); $1 = ""; print $0; }'
En OSX o BSD, hay una
-r
bandera equivalente que aparentemente toma una marca de tiempo de Unix. Aquí hay un ejemplo que ejecuta la fecha cuatro veces: una vez para la primera fecha, para mostrar lo que es; uno para la conversión a marca de tiempo de Unix con%s
, y finalmente, uno que, con-r
, convierte lo que%s
proporciona de nuevo a una cadena.Al menos, parece funcionar en mi máquina.
fuente
Puede obtener la fecha formateada de la marca de tiempo como esta
fuente
He escrito un guión que hace esto yo mismo:
fuente
En esta respuesta, copio la respuesta de Dennis Williamson y la modifico ligeramente para permitir un gran aumento de velocidad al canalizar una columna de muchas marcas de tiempo al guión. Por ejemplo, conectar 1000 marcas de tiempo al script original con xargs -n1 en mi máquina tomó 6.929s en lugar de 0.027s con esta versión modificada:
fuente
algún ejemplo:
fuente
Yo uso este one-liner multiplataforma:
Debería funcionar tanto en macOS como en versiones posteriores de distribuciones comunes de Linux.
fuente
Si bien no es puro bash, el siguiente script convertirá las marcas de tiempo de longitud 13 en una cadena a su fecha equivalente en su zona horaria local usando perl
timestamp_to_date.sh
entrada
salida
fuente
En PHP
fuente