310 votes

Comment faire pour convertir les horodatages de dates en bash?

J'ai besoin d'un shell de commande ou un script qui convertit un timestamp UNIX d'une date. L'entrée peut provenir soit du premier paramètre ou à partir de stdin, permettant les modes d'utilisation suivants:

ts2date 1267619929

et

echo 1267619929 | ts2date

Les deux commandes de sortie "Mer Mar 3 13:38:49 2010".

609voto

a'r Points 14772

Sur les versions ultérieures de la commune de distributions Linux, vous pouvez utiliser:

date -d @1267619929

184voto

rafaelzlisboa Points 231
date -r<number>

fonctionne pour moi sur mac osx

29voto

Dennis Williamson Points 105818

Cette version est similaire à chiborg de la réponse, mais il élimine la nécessité pour les externes tty et cat. Il utilise date, mais pourrait tout aussi bien utiliser gawk. Vous pouvez modifier le shebang et remplacer les doubles crochets avec un seul et ce sera également exécuter dans sh.

#!/bin/bash
LANG=C
if [[ -z "$1" ]]
then
    if [[ -p /dev/stdin ]]    # input from a pipe
    then
        read -r p
    else
        echo "No timestamp given." >&2
        exit
    fi
else
    p=$1
fi
date -d @$p +%c

18voto

ghostdog74 Points 86060

vous pouvez utiliser GNU date par exemple

$ sec=1267619929
$ date -d "UTC 1970-01-01 $sec secs"

ou

$ date -ud @1267619929

10voto

codaddict Points 154968

Vous pouvez utiliser ce simple script awk:

#!/bin/gawk -f   
{ print strftime("%c", $0); }

Exemple d'utilisation:

$ echo '1098181096' | ./a.awk 
Tue 19 Oct 2004 03:18:16 AM PDT
$

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X