변수가 Start=08:22:39이고 end=08:23:22인 경우. 이 두 변수의 차이를 어떻게 얻을 수 있나요?

변수가 Start=08:22:39이고 end=08:23:22인 경우. 이 두 변수의 차이를 어떻게 얻을 수 있나요?

시작=08:20:12 끝=08:22:12

차이를 계산하는 방법.

해결 도와주세요..

답변1

두 시간이 모두 같은 날(예: 23:59:00 - 00:01:00 대신)이고 시간이 23보다 크지 않다고 가정하면 다음 명령(in bash또는 POSIX- sh)을 사용하면 몇 시간이 표시되는지 확인할 수 있습니다. 몇 초 만에 둘 사이의 차이점을 알아볼 수 있습니다.

$ start="08:20:12" end="08:22:12"
$ echo $(( $(date +"%s" -d "$end") - $(date +"%s" -d "$start") ))
120

또 다른 방법은 date명령을 사용하지 않고 $end이 값이 다음보다 큰지 확인하고, 그렇지 않은 경우 $start24시간의 초를 추가하는 것입니다.$end

# start="08:20:12" end="08:22:12"

# IFS=: read h m s <<< $start;  START=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# IFS=: read h m s <<< $end;  END=$(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} ))
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

또한 이 코드는 숫자가 10보다 작은 경우 시/분/초에서 앞에 오는 0을 제거하여 단일 숫자로 변환합니다(세 숫자가 모두 두 자리라고 가정). 그리고 시간을 초로 변환하는 함수를 작성하세요.

# function convert_to_seconds { IFS=: read h m s <<< $1;  echo $(( (3600 * ${h#0} ) + (60 * ${m#0}) + ${s#0} )) ; }

# START=$(convert_to_seconds "23:59:12")
# END=$(convert_to_seconds "00:01:12")
# [[ $END -lt $START ]] && END=$(( $END + (24*60*60) ))

# echo $(( $END - $START ))
120

관련 정보