Come trovo i secondi dalla mezzanotte?


11

Utilizzando il dateprogramma, come posso calcolare il numero di secondi dalla mezzanotte?


1
data "+ (% H * 60 +% M) * 60 +% S" | aC
groxxda,

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

Risposte:


14

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, dashe poshcausano problemi con 09(i serbatoi lamenta che sia un numero ottale valido).


Molto intelligente e buon uso di eval
Ulrich Dangel,

Preferirei usare qualcosa del genere:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri,

7

Non è necessaria alcuna espressione aritmetica, basta usare la data pura:

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

Ottima risposta, dovrebbe essere la migliore.
Leopoldo Sanczyk,

1
Su Mac brew install coreutilse sostituisci datecongdate
Connor McCormick il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.