Como encontro segundos desde a meia-noite?

9

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

    
por Ducky 25.07.2014 / 14:51

2 respostas

14

Para evitar condições de corrida, ainda assumindo a data do 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))

Portáteis, em fusos horários onde não há opção de horário de verão, você poderia fazer:

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

O ${X#0} é remover 0s iniciais que, em algumas camadas como bash , dash e posh , causam problemas com 09 (onde a shell reclama que é um número octal inválido).

    
por 25.07.2014 / 15:10
2

Com base no bash, obtenha o tempo atual em milissegundos desde a meia-noite , em um sistema GNU, isso pode ser feito assim :

$ now=$(date '+%s')
$ midnight=$(date -d 'today 00:00:00' '+%s')
$ echo $(( now - midnight ))
53983
    
por 25.07.2014 / 15:00

Tags