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.