csh は、開始時刻と終了時刻の両方を hh:mm:ss 形式で入力して、差を取得します。

csh は、開始時刻と終了時刻の両方を hh:mm:ss 形式で入力して、差を取得します。

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

分単位で出力を返す必要があります

シリーズを再帰的にループしているので、値を新しい大きな値と比較するにはどうすればよいでしょうか。 | bc は csh で機能しますか?

答え1

完全な差異については:

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

分単位の差の場合:

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

bash でも動作します。

答え2

2 つの日付を複数の日にまたがって指定するのか、それとも両方とも同じ日で順序は任意であると想定するのかが明確ではありません。

この回答は最初のことを前提としており、つまりtimediff 23:00:00 01:00:002 時間 = 120 分を返す必要があります。

22 時間 = 79200 分を返す場合は、@ s = 86400 + $sに変更します。@ s = - $s

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

スクリプトとして:

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

関連情報