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

目前尚不清楚您是否希望這兩個日期連續幾天,或者您假設它們都在同一天並且可以按任何順序排列。

這個答案假設第一個,即timediff 23:00:00 01:00:00應該回傳 2 小時 = 120 分鐘。

改為@ s = 86400 + $s是否@ s = - $s應返回 22 小時 = 79200 分鐘。

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

相關內容