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?
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?
Respostas:
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 date
saída para permitir bc
interpretar e calcular a fórmula.
zsh
date "+%H*60+%M" | bc
funciona tão bem também. Provavelmente em praticamente qualquer shell.
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
echo $(( $(date "+%k * 60 + 10#%M") ))
é o que eu quis dizer
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 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
IFS=: set -- $(date +%T); echo $1
retornos 08:16:52
- você vai precisarIFS=:; set ...
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
bash: 9 17*60+: syntax error in expression (error token is "17*60+")
echo $(date +"%H*60+%M") | bc
, ele também funciona no zsh;)