comment puis-je prendre un total de minutes de temps?

8

Mon système a affiché l'heure comme ceci 10:42 quand j'ai entré la commande date +%R. Je dois prendre au total quelques minutes. Cela signifie comme cela 642 minutes. Existe-t-il une commande ou un script shell pour afficher le temps total en minutes?

Dinesh Dhananjayan
la source

Réponses:

11

Pour obtenir uniquement le total des 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 datesortie pour permettre bcd'interpréter et de calculer la formule.

Sylvain Pineau
la source
2
Si vous utilisez echo $(date +"%H*60+%M") | bc, cela fonctionne aussi dans zsh;)
AB
@AB Un jour, je passerai àzsh
Sylvain Pineau
1
date "+%H*60+%M" | bcfonctionne aussi bien aussi. Probablement dans à peu près n'importe quelle coquille.
Digital Trauma
@DigitalTrauma: Simple, merci. J'ai mis à jour ma réponse en conséquence.
Sylvain Pineau
5

bash juste:

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

Forcer les deux variables à être traitées comme base-10, pour éviter que le shell ne lance des erreurs pour les nombres octaux invalides 08et09

glenn jackman
la source
Oui, echo $(( $(date "+%k * 60 + 10#%M") ))c'est ce que je voulais dire
Digital Trauma
1
Ouais rien de mal à ça. Peut-être que ma réponse est un peu plus ... pédagogique
glenn jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Ou

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

date +%l va obtenir les heures, multiplier par 60 et ajouter des minutes date +%M

7171u
la source
2

Utilisation de dateet 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

Utiliser dateet le 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
UN B
la source
1
@DineshDhananjayan Êtes-vous satisfait de ma réponse? Donnez-moi ensuite un vote positif (∧). Si je pouvais résoudre votre problème, ce serait bien que vous marquiez ma réponse (✓). askubuntu.com/help/someone-answers ;)
AB
1
Je ne pense pas que votre réponse zsh soit correcte: IFS=: set -- $(date +%T); echo $1retourne 08:16:52- vous aurez besoinIFS=:; set ...
glenn jackman
@glennjackman Ups et merci, corrigé. : \
AB
1

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
Maythux
la source
J'ai corrigé votre réponse. Le message d'erreur étaitbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB