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분을 반환해야 하는 첫 번째 답변을 가정합니다 .

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

관련 정보