몇 초 안에 두 시간의 차이를 구해야 합니다.

몇 초 안에 두 시간의 차이를 구해야 합니다.

다음 두 변수에는 시작 시간과 종료 시간이 포함됩니다. 이 두 시간의 차이(초)를 구해야 합니다.

start_time=06:07:25
end_time=07:02:08

원하는 출력

diff_time= 3283 Seconds

나는 ksh88이 설치된 AIX 6.1 시스템을 사용하고 있습니다.

답변1

배시 사용:

t2s()
{
  local T=$1;shift
  echo $((10#${T:0:2} * 3600 + 10#${T:3:2} * 60 + 10#${T:6:2})) 
}

start_time=06:07:25
end_time=07:02:08

diff_time=$(( $(t2s $end_time) - $(t2s $start_time) ))

답변2

end_time항상 그보다 크다고 확신한다면 start_timePerl을 다음과 같이 사용할 수 있습니다.

export start_time=06:07:25
export end_time=07:02:08
perl -e '
    ($h1,$m1,$s1) = split /:/,$ENV{start_time};
    ($h2,$m2,$s2) = split /:/,$ENV{end_time};
    $delta_h = $h2 - $h1;
    $delta_m = $m2 - $m1;
    if( $delta_m < 0 ) { $delta_m = $delta_h-- * 60 + $m2 - $m1; }
    $delta_s = $s2 - $s1;
    if( $delta_s < 0 ) { $delta_s = $delta_m-- * 60 + $s2 - $s1; }
    print "diff_time=", $delta_h * 3600 + $delta_m * 60 + $delta_s, " seconds\n"
'

{k,}sh매개 변수 확장과 쉘 연산을 통해서만 이 작업을 수행 할 수 있습니다 . 저는 편의상 Perl을 사용합니다.

POSIX 쉘 스크립트는 다음과 같습니다.

start_time=06:07:25
end_time=07:02:08
h1=${start_time%%:*}
start_time=${start_time#*:}
m1=${start_time%%:*}
s1=${start_time#*:}
h2=${end_time%%:*}
end=${end#*:}
m2=${end_time%%:*}
s2=${end_time#*:}
delta_h=$(( h2 - h1 ))
delta_m=$(( m2 - m1 ))
if [ $delta_h -lt 0 ];then
    delta_m=$(( delta_h * 60 + m2 -m1 ))
    delta_h=$(( delta_h - 1 ))
fi
delta_s=$(( s2 - s1 ))
if [ $delta_s -lt 0 ];then
    delta_s=$(( delta_m * 60 + s2 - s1 ))
    delta_m=$(( delta_m - 1 ))
fi
delta_all=$(( delta_h * 3600 + delta_m * 60 + delta_s ))
printf "diff_time = %d seconds\n" $delta_all

관련 정보