como posso tirar o total de minutos do tempo?

8

Meu sistema exibiu o horário como este 10:42 quando eu introduzo o comando %código%. Eu preciso levar em minutos totais do tempo. Isso significa que assim são 642 minutos. Existe algum comando ou script de shell para exibir o tempo total em minutos?

    
por Dinesh Dhananjayan 10.07.2015 / 08:33

5 respostas

11

Para obter apenas o total de minutos do dia, use o seguinte comando:

$ date "+%H*60+%M" | bc

Exemplo:

$ date +%R
09:30
$ date "+%H*60+%M" | bc
570

O truque é formatar a saída date para permitir que bc interprete e calcule a fórmula.

    
por Sylvain Pineau 10.07.2015 / 09:31
5

apenas bash:

IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))

Forçando as duas variáveis a serem tratadas como base-10, para evitar erros de lançamento de shell para números octais inválidos 08 e 09

    
por glenn jackman 10.07.2015 / 12:18
3
date +%R | awk -F ":" '{print ( * 60) + }'

Ou

 echo $((($(date +%l) * 60 ) + $(date +%M)))

date +%l obterá as horas, multiplicará com 60 e adicionará minutos date +%M

    
por 7171u 10.07.2015 / 08:42
2

Usando date e bash :

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

Exemplo

$ date
Fr 10. Jul 08:45:05 CEST 2015

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

Usando date e um z-shell (zsh):

IFS=:; set -- $(date +%T); echo "$((( * 3600 +  * 60 + ) / 60))"

Exemplo

% date
Fr 10. Jul 08:40:53 CEST 2015

% IFS=:; set -- $(date +%T); echo "$((( * 3600 +  * 60 + ) / 60))"
520
    
por A.B. 10.07.2015 / 08:41
1

Você não precisa usar o IFS, você pode fazer assim:

date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo  "Total minutes: $(($H * 60 + $M))"

saída é:

Total minutes: 593
    
por Maythux 10.07.2015 / 08:56