Comment trouver les secondes depuis minuit?


11

En utilisant le dateprogramme, comment puis-je calculer le nombre de secondes depuis minuit?


1
date "+ (% H * 60 +% M) * 60 +% S" | bc
groxxda

1
echo $ (($ (date '+ (% H * 60 +% M) * 60 +% S')))
groxxda

Réponses:


14

Pour éviter les conditions de concurrence, en supposant toujours la date GNU:

eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"

Avec zsh, vous pouvez le faire en interne:

zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))

De manière portable, dans les fuseaux horaires où il n'y a pas de commutateur d'heure d'été, vous pouvez faire:

IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"

Le ${X#0}est de dépouiller premier plan 0s qui , dans certains coquillages aiment bash, dashet poshcauser des problèmes avec 09(où la coquille se plaint à ce sujet étant un nombre octal non valide).


Très intelligent et bon usage d'eval
Ulrich Dangel

Je préfère utiliser quelque chose comme ça:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri

7

Aucune expression arithmétique n'est nécessaire, utilisez simplement la date pure:

date -d "1970-01-01 UTC $(date +%T)" +%s

Grande réponse, devrait être la première.
Leopoldo Sanczyk

1
Sur Mac brew install coreutilset remplacer datepargdate
Connor McCormick

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.