Wie kann ich insgesamt Minuten von der Zeit nehmen?

8

Mein System zeigte die Zeit wie diese 10:42 an, als ich den Befehl eingab date +%R. Ich muss insgesamt Minuten der Zeit in Anspruch nehmen. Das heißt so 642 Minuten. Gibt es einen Befehl oder ein Shell-Skript zum Anzeigen der Gesamtzeit in Minuten?

Dinesh Dhananjayan
quelle

Antworten:

11

Um nur die Gesamtminuten des Tages zu erhalten, würde ich den folgenden Befehl verwenden:

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

Beispiel:

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

Der Trick besteht darin, die dateAusgabe so zu formatieren , dass bcdie Formel interpretiert und berechnet werden kann.

Sylvain Pineau
quelle
2
Wenn Sie verwenden echo $(date +"%H*60+%M") | bc, funktioniert es auch in zsh;)
AB
@AB Eines Tages werde ich zuzsh
Sylvain Pineau
1
date "+%H*60+%M" | bcfunktioniert genauso gut. Wahrscheinlich in fast jeder Schale.
Digitales Trauma
@ DigitalTrauma: Einfach, danke. Ich habe meine Antwort entsprechend aktualisiert.
Sylvain Pineau
5

nur schlagen:

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

Erzwingen, dass beide Variablen als Basis-10 behandelt werden, um zu vermeiden, dass die Shell Fehler für ungültige Oktalzahlen 08und wirft09

Glenn Jackman
quelle
Ja, echo $(( $(date "+%k * 60 + 10#%M") ))das wollte ich sagen
Digital Trauma
1
Ja, daran ist nichts auszusetzen. Vielleicht ist meine Antwort ein bisschen mehr ... Anleitung
Glenn Jackman
3
date +%R | awk -F ":" '{print ($1 * 60) + $2}'

Oder

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

date +%l wird die Stunden erhalten, mit 60 multiplizieren und Minuten hinzufügen date +%M

7171u
quelle
2

Verwenden von dateund bash:

eval "$(date +'today=%F now=%s')"; midnight=$(date -d "$today 0" +%s);echo "$(((now - midnight) / 60))"

Beispiel

$ 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

Verwenden dateund die Z-Shell (zsh):

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

Beispiel

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

% IFS=:; set -- $(date +%T); echo "$((($1 * 3600 + $2 * 60 + $3) / 60))"
520
AB
quelle
1
@DineshDhananjayan Waren Sie mit meiner Antwort zufrieden? Dann gib mir eine Gegenstimme (∧). Wenn ich Ihr Problem lösen könnte, wäre es schön, wenn Sie meine Antwort markieren würden (✓). askubuntu.com/help/someone-answers ;)
AB
1
Ich denke nicht, dass Ihre zsh Antwort richtig ist: IFS=: set -- $(date +%T); echo $1kehrt zurück 08:16:52- Sie werden brauchenIFS=:; set ...
Glenn Jackman
@glennjackman Ups und danke, korrigiert. : \
AB
1

Sie müssen IFS nicht verwenden, Sie können dies folgendermaßen tun:

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

Ausgabe ist:

Total minutes: 593
Maythux
quelle
Ich habe deine Antwort korrigiert. Die Fehlermeldung warbash: 9 17*60+: syntax error in expression (error token is "17*60+")
AB