Utilizzando il date
programma, come posso calcolare il numero di secondi dalla mezzanotte?
Utilizzando il date
programma, come posso calcolare il numero di secondi dalla mezzanotte?
Risposte:
Per evitare le condizioni di gara, sempre ipotizzando la data GNU:
eval "$(date +'today=%F now=%s')"
midnight=$(date -d "$today 0" +%s)
echo "$((now - midnight))"
Con zsh
, puoi farlo internamente:
zmodload zsh/datetime
now=$EPOCHSECONDS
strftime -s today %F $now
strftime -rs midnight %F $today
echo $((now - midnight))
Portabilmente, in fusi orari in cui non c'è interruttore per l'ora legale, puoi fare:
IFS=:
set -- $(date +%T)
echo "$((${1#0} * 3600 + ${2#0} * 60 + ${3#0}))"
Il ${X#0}
è eliminare 0s leader che in alcune conchiglie preferito bash
, dash
e posh
causano problemi con 09
(i serbatoi lamenta che sia un numero ottale valido).
IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
Non è necessaria alcuna espressione aritmetica, basta usare la data pura:
date -d "1970-01-01 UTC $(date +%T)" +%s
brew install coreutils
e sostituisci date
congdate
Basato su bash, ottieni l'ora corrente in millisecondi dalla mezzanotte , su un sistema GNU, può essere fatto così:
$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
date -d @$seconds