1

How can i get the time difference in 2 variables in shell

say i have 4 variables-

    t1=07:50:19:612
    t2=07:52:14:697
    t3=10:20:54:201
    t4=11:02:09:716

 and i want to find difference in times
 result=(t2-t1)+(t4-t3)
4

2 回答 2

1

如果毫秒不能忽略,我建议你定义自己的shell函数:

function getMillis()
{
     val=($(echo $1|grep -Eo "(00|[1-9][0-9]*)"))
     mil=$(( ${val[0]} * 3600000 ))
     mil=$(($mil + ${val[1]}*60000))
     mil=$(($mil + ${val[2]}*1000))
     mil=$(($mil + ${val[3]}))
     echo $mil
} 

function format()
{
     hr=$(( $1 / 3600000 ))
     mn=$(( $1 % 3600000 / 60000 ))
     sc=$(( $1 % 60000 / 1000 ))
     ms=$(( $1 % 1000 ))
     echo "$hr hours,  $mn mins, $sc secs, $ms millisecs"
}

然后您可以获得所需的结果:

res=$(( $(getMillis $t2) - $(getMillis $t1) + $(getMillis $t4) - $(getMillis $t3) ))
format $res

上面的代码只是为了展示如何做到这一点。可能还有其他优雅的解决方案。

于 2013-08-12T09:17:38.453 回答
1

据我所知,shell 不支持毫秒的日期格式。命令 date 可以处理时间格式,精度四舍五入到秒。

以下是以秒为最小时间单位的时间格式示例:

t1=07:50:19
t2=07:52:14
t3=10:20:54
t4=11:02:09

t10=$(date -d $t1 +%s)
t20=$(date -d $t2 +%s)
t30=$(date -d $t3 +%s)
t40=$(date -d $t4 +%s)

result=$(expr $t20 - $t10 + $t40 - $t30)
echo $result

hour=$(expr $result / 3600)
min=$(expr $result % 3600 / 60)
sec=$(expr $result % 60)

echo $hour:$min:$sec
于 2013-08-12T07:50:08.650 回答