Mon système affiche l’heure comme celle-ci 10:42 lorsque j’ai entré la commande date +%R
. J'ai besoin de prendre en minutes totales du temps. Cela signifie comme ceci 642 minutes. Existe-t-il une commande ou un script Shell permettant d’afficher la durée totale en minutes?
Pour obtenir uniquement le nombre total de minutes de la journée, j'utiliserais la commande suivante:
$ date "+%H*60+%M" | bc
Exemple:
$ date +%R
09:30
$ date "+%H*60+%M" | bc
570
L'astuce consiste à formater la sortie date
pour permettre à bc
d'interpréter et de calculer la formule.
juste bash:
IFS=: read hour min < <(date +%R)
echo $(( 60 * 10#$hour + 10#$min ))
Forcer les deux variables à être traitées en base 10, afin d'éviter que le shell ne génère des erreurs pour les nombres octaux invalides 08
et 09
date +%R | awk -F ":" '{print ($1 * 60) + $2}'
Ou
echo $((($(date +%l) * 60 ) + $(date +%M)))
date +%l
obtiendra les heures, multipliera par 60 et ajoutera des minutes date +%M
Utiliser date
et bash
:
eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"
Exemple
$ 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
En utilisant date
et un z-Shell (zsh):
IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
Exemple
% date
Fr 10. Jul 08:40:53 CEST 2015
% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
Vous n'avez pas besoin d'utiliser IFS, vous pouvez le faire de cette façon:
date=$(date +'%l:%M')
read H M <<< ${date//[-: ]/ }
echo "Total minutes: $(($H * 60 + $M))"
la sortie est:
Total minutes: 593