./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