
./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분을 반환해야 한다고 가정합니다.
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