Jai un horodatage UNIX et jaimerais obtenir une date formatée (comme la sortie de date
) correspondant à cet horodatage.
Mes tentatives jusquà présent:
$ date +%s 1282367908 $ date -d 1282367908 date: invalid date `1282367908" $ date -d +1282367908 date: invalid date `+1282367908" $ date +%s -d +1282367908 date: invalid date `+1282367908"
Je « voudrais pouvoir obtenir un résultat comme:
$ TZ=UTC somecommand 1282368345 Sat Aug 21 05:25:45 UTC 2010
Réponse
Sous Mac OS X et BSD:
$ date -r 1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -r 1282368345 +%Y-%m-%d 2010-08-21
avec les outils de base GNU (vous devez fouiller dans le fichier info pour cela):
$ date -d @1282368345 Sat Aug 21 07:25:45 CEST 2010 $ date -d @1282368345 --rfc-3339=date 2010-08-21
Avec lun ou lautre, ajoutez loption -u
(standard) ou passez une TZ=UTC0
variable denvironnement pour avoir la date UTC (TZ=UTC0
définit un fuseau horaire appelé UTC
avec un décalage de 0 par rapport à UTC tandis que le comportement de TZ=UTC
(sans décalage) nest pas spécifié (bien que sur la plupart des systèmes il se réfère à un système défini fuseau horaire également appelé UTC
avec décalage 0 par rapport à UTC)).
Commentaires
Réponse
Ce one-liner perl le fera:
$ perl -e "print scalar localtime $ARGV[0]" 1282367908 Sat Aug 21 09:18:28 2010
Réponse
Après quelques recherches sur Google, jai trouvé un moyen de le faire avec le date
commande uniquement:
$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds" Sat Aug 21 09:18:28 MSD 2010
Commentaires
- Merci pour cela. Jespérais que ' serait quelque chose de plus simple, donc juste un vote pour linstant.
- un autre excellent exemple de la façon dont Google vous rend stupide. personne ne lit plus la documentation?
- @hop, la prise en charge de
date -d @xxx
na été ajoutée quà coreutils 5.3 en 2005. Cela ' est comment vous deviez le faire avant cela. - @St é phaneChazelas: a) cette réponse date de 2010 et b) pourquoi cela excuser googler avant de lire la documentation? Si vous répondez de votre propre autorité, on peut excuser de faire des erreurs comme celle-ci, mais si vous devez quand même le rechercher, cherchez-le correctement.
- @hop, je voulais juste souligner que ce nétait pas une réponse stupide, juste une réponse obsolète.
Réponse
Avec le shell intégré:
-
zsh
(4.1.1 (2003) et plus):$ zmodload zsh/datetime $ TZ=UTC0 strftime %c 1282368345 Sat 21 Aug 2010 05:25:45 UTC
-
ksh93
(ksh93i
(2000) et supérieur):$ TZ=UTC0 printf "%(%c)T\n" "#1282368345" Sat Aug 21 05:25:45 2010
-
bash
(4.2 (2010) et supérieur):$ TZ=UTC0 printf "%(%c)T\n" 1282368345 Sat 21 Aug 2010 05:25:45 UTC
Dans tous ceux-ci, remplacez %c
par le format strftime()
souhaité.
Commentaires
- Avez-vous une référence pour le
bash
printf
solution? - Peu importe, je lai trouvée dans la description de
printf
dans gnu.org/software/bash/manual/bashref.html#Bash-Builtins .
Réponse
Sur osx, pour avoir en UTC
date -r "1475737200" -u
Commentaires
- Merci. Jai ' modifié cela dans la réponse acceptée afin que les informations soient plus facilement disponibles.
Réponse
Répondez à une vieille question, mais je pense que cela pourrait être une amélioration si quelquun dautre le recherche. Cette fonction Bash fonctionne à la fois sous Linux et OS X. Je nai testé sur aucun autre système BSD. Passez lheure de lépoque comme argument à cette fonction et elle affichera le format dheure RFC-3339.
epochtorfc3339 () { RFC3339_FORMAT="+%FT%T:::%z" EPOCH=$(echo $@ | sed -n "s/.*\([0-9]\{10\}\).*/\1/p"); if date --version >/dev/null 2>/dev/null; then # Linux date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${EPOCH} seconds" #date -d @${EPOCH} --rfc-3339=seconds else # OS X/BSD date -r ${EPOCH} ${RFC3339_FORMAT} fi }
Réponse
Un autre exemple intéressant du riche héritage dUnix moderne. Ceci est en effet possible sous la plupart des variantes BSD:
$ TZ=UTC date -r 1282368345 Sat Aug 21 05:25:45 UTC 2010
(BTW votre exemple semble être décalé dune seconde)
Commentaires
- Ne fonctionne pas ' sous Linux. La réponse de hop ' semble avoir la bonne réponse Linux. Merci de lavoir signalé, je soupçonnais que quelque chose de ce genre se produirait, ' jai réussi 45 secondes maintenant.
info coreutils date
un peu plus attentivement.date -r 1447264553943
résultats dansWed Dec 28 01:39:03 BRST 47831
, lorsque ' est en fait11/11/2015, 3:55:53 PM GMT-2:00
.