Como encontro segundos desde meia-noite?


11

Usando o dateprograma, como posso calcular o número de segundos desde a meia-noite?


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

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

Respostas:


14

Para evitar condições de corrida, ainda assumindo a data GNU:

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

Com zsh, você pode fazer isso internamente:

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

De maneira portável, em fusos horários em que não há opção de horário de verão, você pode:

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

A ${X#0}é para descascar principais 0s que em alguns escudos como bash, dashe poshcausam problemas com 09(onde o shell reclama sobre ele ser um número octal inválido).


Muito inteligente e bom uso de eval
Ulrich Dangel

Eu prefiro usar algo nesse sentido:IFS=: read -r today now <<< $(date +%F:%s); midnight=$(date -d "$today 0" +%s); echo $(( now - midnight ))
x-yuri


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.