J'ai besoin de quelque chose de simple, comme date
, mais en secondes depuis 1970 au lieu de la date, des heures, des minutes et des secondes actuelles.
date
ne semble pas offrir cette option. Y a-t-il un moyen facile?
Cela devrait fonctionner:
date +%s
Juste pour ajouter.
Obtenez les secondes depuis Epoch (1er janvier 1970) pour une date donnée (par exemple le 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 intéressante que vous pouvez faire avec la date (copiée sans vergogne de date --help
). Afficher l'heure locale pour 9 heures 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
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 l'argument -1
, affiche la date actuelle avec le format donné par dateformat
, géré 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 avez besoin de stocker le résultat dans une variable var
:
printf -v var '%(%s)T' -1
Aucun programme externe et aucun sous-shell!
Depuis Bash 4.3, il est même possible de ne pas spécifier le -1
:
printf -v var '%(%s)T'
(mais il serait peut-être plus sage de toujours donner l'argument -1
néanmoins).
Si vous utilisez -2
comme argument au lieu de -1
, Bash utilisera l'heure à laquelle le shell a été démarré au lieu de la date actuelle (mais pourquoi voudriez-vous cela?).
Avec la plupart des implémentations d'Awk:
awk 'BEGIN {srand(); print srand()}'
Ceci est une extension de ce que @pellucide a fait, mais pour les Mac:
Déterminer le nombre de secondes écoulées depuis Epoch (1er janvier 1970) pour une date donnée (par exemple le 21 octobre 1973).
$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800
Veuillez noter que, par souci d'exhaustivité, j'ai ajouté la partie heure au format. La raison en est que date
prendra la date que vous lui avez donnée et ajoutera le temps actuel à la valeur fournie. Par exemple, si vous exécutez la commande ci-dessus à 16h19, sans la partie '00: 00: 00 ', l'heure sera automatiquement ajoutée. Ainsi, "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
Depuis bash
5.0 ( publié le 7 janvier 2019 ), vous pouvez utiliser la variable intégrée EPOCHSECONDS
.
$ echo $EPOCHSECONDS
1547624774
Il y a aussi EPOCHREALTIME
qui inclut des fractions de secondes.
$ echo $EPOCHREALTIME
1547624774.371215
EPOCHREALTIME
peut être converti en micro-secondes (μs) en supprimant le point décimal. Cela pourrait être intéressant lorsque vous utiliserez l'arithmétique intégrée de bash
(( 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 temporelles seraient différentes car chaque commande prend un peu de temps pour être exécutée.
utilisez ce script bash (mon ~/bin/Epoch
):
#!/bin/bash
# get seconds since Epoch
test "x$1" == x && date +%s && exit 0
# or convert Epoch seconds to date format (see "man date" for options)
Epoch="$1"
shift
date -d @"$Epoch" "$@"