csh, um die Differenz zwischen Start- und Endzeit zu ermitteln, beide Eingaben im Format hh:mm:ss

csh, um die Differenz zwischen Start- und Endzeit zu ermitteln, beide Eingaben im Format hh:mm:ss

./script.csh 05:25:00 02:30:50

sollte die Ausgabe in Minuten zurückgeben

da ich die Reihe rekursiv durchlaufe, wie vergleiche ich Werte mit einem neuen großen Wert? Würde |bc in csh funktionieren?

Antwort1

Für den vollständigen Unterschied:

perl -e 'for(@ARGV){s/(..):(..):(..)/$1*3600+$2*60+$3/e} $_=(shift)-(shift); printf"%02d:%02d:%02d\n",$_/3600,$_/60%60,$_%60' 05:25:00 02:30:50

Für die Differenz in Minuten:

perl -e 'for(@ARGV){s/(..):(..):(..)/$1*3600+$2*60+$3/e} $_=(shift)-(shift); printf"%d\n",$_/60' 05:25:00 02:30:50

Funktioniert auch in Bash.

Antwort2

Es ist nicht klar, ob Sie möchten, dass die beiden Daten über mehrere Tage verteilt werden, oder ob Sie davon ausgehen, dass sie beide am selben Tag liegen und in beliebiger Reihenfolge stehen können.

Diese Antwort setzt das Erste voraus, d. h. sie timediff 23:00:00 01:00:00sollte 2 Stunden = 120 Minuten zurückgeben.

Ändern Sie @ s = 86400 + $ses @ s = - $s, wenn das Ergebnis 22 Stunden = 79200 Minuten sein soll.

alias timediff 'set t=(\!:*:gs/:/ * 3600 + /:gs/:/ * 60 + /:q);\\
   @ s = ($t[2]) - ($t[1]); if($s < 0) @ s = 86400 + $s;\\
   @ m = $s / 60;\\
   @ H = $s / 3600 M = $s % 3600 / 60 S = $s % 60;\\
   echo seconds=$s minutes=$m hours=$H\:$M\:$S'

timediff 05:25:00 02:30:50
seconds=75950 minutes=1265 hours=21:5:50

Als Skript:

set t=($argv:gs/:/ * 3600 + /:gs/:/ * 60 + /:q)
@ s = ($t[2]) - ($t[1]); if($s < 0) @ s = 86400 + $s
@ m = $s / 60
@ H = $s / 3600 M = $s % 3600 / 60 S = $s % 60
echo seconds=$s minutes=$m hours=$H\:$M\:$S

verwandte Informationen