Existe-t-il un moyen rapide et unique de convertir un horodatage Unix en une date à partir de la ligne de commande Unix?
date
pourrait fonctionner, sauf qu'il est plutôt difficile de spécifier chaque élément (mois, jour, année, heure, etc.), et je ne peux pas comprendre comment le faire fonctionner correctement. Il semble qu'il y ait un moyen plus simple - est-ce que je manque quelque chose?
bash
shell
unix
unix-timestamp
chimère
la source
la source
Réponses:
Avec GNU,
date
vous pouvez faire:(De: BASH: Convertir l'horodatage Unix en date )
Sous OS X, utilisez
date -r
.Sinon, utilisez
strftime()
. Il n'est pas disponible directement depuis le shell, mais vous pouvez y accéder via gawk . Le%c
spécificateur affiche l'horodatage en fonction des paramètres régionaux.la source
date -d @1278999698 +'%Y-%m-%d %H:%M:%S'
Où le nombre derrière@
est le nombre en secondesla source
date -r 1278999698 +'%Y-%m-%d %H:%M:%S'
(GMT) ou simplementdate -r 1278999698
Cette solution fonctionne avec des versions de date qui ne prennent pas en charge
date -d @
. Il ne nécessite pas AWK ou d'autres commandes. Un horodatage Unix est le nombre de secondes depuis le 1er janvier 1970, UTC, il est donc important de spécifier UTC.Si vous êtes sur un Mac, utilisez:
Commande pour obtenir l'époque:
Le crédit revient à Anton: BASH: Convertir l'horodatage Unix en date
la source
Comme le dit @TomMcKenzie dans un commentaire sur une autre réponse,
date -r 123456789
est sans doute une solution simple plus courante (c'est-à-dire plus largement implémentée) pour les temps donnés en secondes depuis l'époque Unix, mais malheureusement, il n'y a pas de solution portable garantie universelle.L'
-d
option sur de nombreux types de systèmes signifie quelque chose de complètement différent de l'--date
extension GNU Date . Malheureusement, GNU Date n'interprète pas-r
la même chose que ces autres implémentations. Donc, malheureusement, vous devez savoir quelle version dedate
vous utilisez, et de nombreusesdate
commandes Unix plus anciennes ne prennent en charge aucune de ces options.Pire encore, POSIX
date
ne reconnaît-d
ni-r
et ne fournit aucun moyen standard dans aucune commande (à ma connaissance) de formater une heure Unix à partir de la ligne de commande (puisque POSIX Awk manque égalementstrftime()
). (Vous ne pouvez pas utilisertouch -t
etls
parce que le premier n'accepte pas un temps donné en secondes depuis l'époque Unix.)Notez bien que The One True Awk disponible directement auprès de Brian Kernighan a maintenant la
strftime()
fonction intégrée ainsi qu'unesystime()
fonction pour renvoyer l'heure actuelle en secondes depuis l'époque Unix), donc peut-être que la solution Awk est la plus portable.la source
Si vous trouvez la notation gênante, peut-être que l'
-R
option-vous aide. Il dépasse la date au format RFC 2822. Ainsi , vous aurez pas besoin de tous ces identifiants:date -d @1278999698 -R
. Une autre possibilité est de la date de sortie en quelques secondes dans votre région:date -d @1278999698 +%c
. Cela devrait être facile à retenir. :-)la source
Légère correction de la réponse de dabest1 ci-dessus. Spécifiez le fuseau horaire comme UTC, pas GMT:
Le second est correct. Je pense que la raison en est qu'au Royaume-Uni, l'heure d'été était en vigueur de 1968 à 1971.
la source
La solution standard de Perl est:
(ou heure locale, si vous préférez)
la source
la source
D'autres exemples ici sont difficiles à retenir. Dans sa plus simple expression:
la source
Mettez ce qui suit dans votre ~ / .bashrc:
Exemple d'utilisation:
la source
Python:
la source