J'ai besoin de quelque chose de simple date
, mais en quelques secondes depuis 1970 au lieu de la date, des heures, des minutes et des secondes actuelles.
date
ne semble pas offrir cette option. Existe-t-il un moyen simple?
J'ai besoin de quelque chose de simple date
, mais en quelques secondes depuis 1970 au lieu de la date, des heures, des minutes et des secondes actuelles.
date
ne semble pas offrir cette option. Existe-t-il un moyen simple?
Réponses:
Cela devrait fonctionner:
date +%s
%s seconds since 1970-01-01 00:00:00 UTC
à %s seconds since the epoch, 1970-01-01 00:00:00 UTC
parce que je l'ai manqué là-dedans.
date
n'est pas intégré bash
, donc votre version de bash
n'a rien à voir avec l' date
implémentation de votre système.
date +%s.%N
date +%s%3N
Juste pour ajouter.
Obtenez les secondes depuis l'époque (1er janvier 1970) pour une date donnée (par exemple 21 octobre 1973).
date -d "Oct 21 1973" +%s
Convertir le nombre de secondes à ce jour
date --date @120024000
La commande date
est assez polyvalente. Une autre chose sympa que vous pouvez faire avec la date (copiée sans vergogne date --help
). Afficher l'heure locale de 9h vendredi prochain sur la côte ouest des États-Unis
date --date='TZ="America/Los_Angeles" 09:00 next Fri'
Mieux encore, prenez le temps de lire la page de manuel http://man7.org/linux/man-pages/man1/date.1.html
date
ou parce que j'utilise zsh
(macOS Catalina) mais cela ne fonctionne pas pour moi. Exécution de $ date -d "Oct 21 1973" +%s
sortiesusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Jusqu'à présent, toutes les réponses utilisent le programme externe date
.
Depuis Bash 4.2, printf
a un nouveau modificateur %(dateformat)T
qui, lorsqu'il est utilisé avec un argument , affiche -1
la date actuelle au format donné par dateformat
, gérée par strftime(3)
( man 3 strftime
pour des informations sur les formats).
Donc, pour une solution Bash pure:
printf '%(%s)T\n' -1
ou si vous devez stocker le résultat dans une variable var
:
printf -v var '%(%s)T' -1
Pas de programmes externes et pas de sous-coquilles!
Depuis Bash 4.3, il est même possible de ne pas spécifier -1
:
printf -v var '%(%s)T'
(mais il serait peut-être plus sage de toujours donner l'argument -1
).
Si vous utilisez -2
comme argument au lieu de -1
, Bash utilisera l'heure de démarrage du shell au lieu de la date actuelle. Cela peut être utilisé pour calculer les temps écoulés
$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422
-2
dans le cas où vous avez un travail plus long (pensez à un script pour contrôler vos sauvegardes) et envoyer un e-mail à la fin "Sauvegarde démarrée à $ une fois terminée à $ maintenant" - ce qui peut être accompli en -2
évitant de stocker un variable dédiée au début.
Depuis la version bash
5.0 ( publiée le 7 janvier 2019 ), vous pouvez utiliser la variable intégrée EPOCHSECONDS
.
$ echo $EPOCHSECONDS
1547624774
Il y a aussi EPOCHREALTIME
qui comprend des fractions de secondes.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
peut être converti en microsecondes (μs) en supprimant le point décimal. Cela peut être intéressant lors de l'utilisation bash
de l'arithmétique intégrée (( expression ))
qui ne peut gérer que des entiers.
$ echo ${EPOCHREALTIME/./}
1547624774371215
Dans tous les exemples ci-dessus, les valeurs de temps imprimées sont égales pour une meilleure lisibilité. En réalité, les valeurs de temps seraient différentes car chaque commande prend un peu de temps pour être exécutée.
date +%s%3N
), vous pouvez utiliserecho $(( ${EPOCHREALTIME/./} / 1000 ))
Avec la plupart des implémentations Awk:
awk 'BEGIN {srand(); print srand()}'
srand()
soient généralement prédéfinies avec la date / heure actuelle. Le deuxième appel à srand()
renvoie la valeur précédemment utilisée comme valeur de départ.
Ceci est une extension de ce que @pellucide a fait, mais pour les Mac:
Pour déterminer le nombre de secondes depuis l'époque (1er janvier 1970) pour une date donnée (par exemple 21 octobre 1973)
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Veuillez noter que pour être complet, j'ai ajouté la partie heure au format. La raison en est que date
cela prendra n'importe quelle partie de date que vous lui avez donnée et ajoutera l' heure actuelle à la valeur fournie. Par exemple, si vous exécutez la commande ci-dessus à 16h19, sans la partie '00: 00: 00 ', elle ajoutera l'heure automatiquement. Tels que "21 octobre 1973" sera analysé comme "21 octobre 1973 16:19:00". Ce n'est peut-être pas ce que vous voulez.
Pour reconvertir votre horodatage en date:
$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973
Page de manuel d'Apple pour l'implémentation de la date: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/date.1.html
date
commande de BSD , alors que toutes les solutions suggérées date -d
sont pour GNU date
. La date BSD dans macOS provient de FreeBSD et partage un certain nombre d'options avec NetBSD et OpenBSD. Et cela est entièrement distinct de bash.
%N
option mentionnée pour les fractions de seconde dans la date gnu est absente de la date MacOS. Le 10.14, aucun des formats n'est dans la page de manuel; ils sont dans la strftime(3)
page de manuel, que vous n'aurez pas si vous n'avez pas installé Xcode, et pourrait ne pas voir avec la commande man même si vous le faites.