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
À la fois les commandes de sortie "Mer Mar 3 13:38:49 2010".
InformationsquelleAutor chiborg | 2010-03-03
Vous devez vous connecter pour publier un commentaire.
Sur les versions ultérieures de la commune de distributions Linux, vous pouvez utiliser:
date -d @$(date -u +%s)
@
pour? Je ne vois pas que dans la GNU page de man à tous.brew install coreutils; gdate -d @1267619929
fonctionne pour moi sur Mac OS X.
Cette version est similaire à chiborg de réponse, mais il élimine la nécessité pour les externes
tty
etcat
. Il utilisedate
, mais pourrait tout aussi bien utilisergawk
. Vous pouvez modifier le shebang et remplacer les doubles crochets avec un seul et ce sera également exécuter danssh
.gawk
est (très grossièrement) 15% plus rapide quedate
dans un laps defor
boucle constituée uniquement degawk 'BEGIN { print strftime("%c", 1256571985); }'
oudate -d '@1256571985' +%c
avec sortie redirigée vers/dev/null
.Vous pouvez utiliser GNU date, par exemple,
ou
Vous pouvez utiliser ce simple script awk:
Exemple d'utilisation:
date -s @
ne fonctionne pas, etawk
encore! Un exemple sans stdin serait utile aussi.Je l'utiliser lors de la conversion des fichiers journaux ou leur surveillance:
awk '{ printf strftime("%c: ", $1); $1 = ""; print $0; }'
Depuis Bash 4.2 vous pouvez utiliser
printf
's%(datefmt)T
format:C'est gentil, parce que c'est une commande interne du shell. Le format de datefmt est une chaîne de caractères acceptés par
strftime(3)
(voirman 3 strftime
). Ici%c
est:Maintenant, si vous voulez un script qui accepte un argument et, si aucun n'est fourni, lit l'entrée standard stdin, vous pouvez procéder comme:
J'ai écrit un script qui fait cela moi-même:
Dans cette réponse que je copie Dennis Williamson de la réponse et de le modifier légèrement pour permettre à une grande augmentation de la vitesse lorsque la tuyauterie d'une colonne de nombreux horodatages pour le script. Par exemple, la tuyauterie 1000 horodatages pour le script d'origine avec xargs -n1 sur ma machine a pris 6.929 s contrairement à 0,027 s avec cette version modifiée:
Dans OSX, ou BSD, il y a un équivalent
-r
drapeau qui prend apparemment un timestamp unix. Voici un exemple qui fonctionne jour quatre fois: une fois pour la première date, pour montrer ce qu'il est: l'un pour la conversion en timestamp unix avec%s
, et enfin, celle qui, avec-r
, convertit ce%s
fournit en une chaîne de caractères.Au moins, semble fonctionner sur ma machine.
quelques exemple:
Vous pouvez obtenir au format date de timestamp comme ce
En PHP