como posso demorar um total de minutos?

8

Meu sistema exibiu a hora como esta 10:42 quando eu inseri o comando date +%R. Eu preciso levar no total de minutos do tempo. Isso significa 642 minutos. Existe algum comando ou script de shell para exibir o tempo total em minutos?

Dinesh Dhananjayan
fonte

Respostas:

11

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

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

Exemplo:

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

O truque é formatar a datesaída para permitir bcinterpretar e calcular a fórmula.

Sylvain Pineau
fonte
2
Se você usar echo $(date +"%H*60+%M") | bc, ele também funciona no zsh;)
AB
@AB Um dia eu vou passar parazsh
Sylvain Pineau
1
date "+%H*60+%M" | bcfunciona tão bem também. Provavelmente em praticamente qualquer shell.
Digital Trauma
@DigitalTrauma: Simples, obrigado. Atualizei minha resposta de acordo.
Sylvain Pineau
5

apenas festança:

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

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

Glenn Jackman
fonte
Sim, echo $(( $(date "+%k * 60 + 10#%M") ))é o que eu quis dizer
Digital Trauma
1
Sim, nada de errado com isso. Talvez a minha resposta é um pouco mais ... instrucional
Glenn Jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Ou

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

date +%l receberá as horas, multiplique por 60 e adicione minutos date +%M

7171u
fonte
2

Usando datee 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 datee o z-shell (zsh):

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

Exemplo

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

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
AB
fonte
1
@DineshDhananjayan Você ficou satisfeito com a minha resposta? Então me dê um voto positivo (∧). Se eu pudesse resolver seu problema, seria bom se você marcasse minha resposta (✓). askubuntu.com/help/someone-answers ;)
AB
1
Eu não acho que sua resposta zsh é correto: IFS=: set -- $(date +%T); echo $1retornos 08:16:52- você vai precisarIFS=:; set ...
glenn jackman
@glennjackman Ups e obrigado, corrigido. : \
AB
1

Você não precisa usar o IFS, pode fazê-lo desta maneira:

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

saída é:

Total minutes: 593
Maythux
fonte
Eu corrigi sua resposta. A mensagem de erro erabash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB