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?

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.


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


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


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

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

J'ai corrigé votre réponse. Le message d'erreur étaitbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.