1

我有 2 个变量。

GMDCOMTM which stores the date time Tue Oct  1 13:32:40 2013
GMDRRSTM which stores the date time Tue Oct  2 23:35:33 2013

如何计算 hh:mm:ss 格式的 2 个变量之间的差异并将其存储在第 3 个变量中。?我不想使用 AWK、SED 或 PERL。我想使用简单的shell脚本来做到这一点。

4

3 回答 3

0

我很正常使用自定义函数来进行计算。这可能很长,但它肯定适用于所有基于 UNIX 和 Linux 的系统。跟随代码块。

time_diff(){
    foodate1=$1
    foodate2=$2
    foosecvall=`echo $foodate1 | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'`
    foosecval2=`echo $foodate2 | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'`
    foodiffsec=$((foosecvall-foosecval2));

    s=$foodiffsec
    h=$((s/3600));
    s=$((s-$((h*3600))));
    m=$((s/60));
    s=$((s-$((m*60))));
    footmstm=$h":"$m":"$s
}

将上面的代码放在你的脚本中,然后像下面这样调用函数。

TIME1="10:12:14"
TIME2="12:15:14"

time_diff $TIME2 $TIME1

echo $footmstm
于 2014-08-04T17:52:40.747 回答
0

将日期转换为%s ---> seconds since 1970-01-01 00:00:00 UTC.

$ date -d"Tue Oct  2 23:35:33 2013" "+%s"
1380749733

bc所以问题是使用计算器来获得两个日期之间的秒差:

$ d1="Tue Oct  1 13:32:40 2013"
$ d2="Tue Oct  2 23:35:33 2013"
$ echo $(date -d"$d2" "+%s") - $(date -d"$d1" "+%s") | bc
122573

然后,您可以利用Stéphane Gimenez 在 UNIX 和 Linux 中指出的强大功能将其缩短为数小时、数天:

$ displaytime 122573
1 days 10 hours 2 minutes and 53 seconds
于 2013-11-11T11:24:46.317 回答
0
C=$(date -d "Tue Oct  1 13:32:40 2013" +%s)
R=$(date -d "Tue Oct  2 23:35:33 2013" +%s)
T=$(date --date=@$((R-C))  +%H:%M:%S)
于 2013-11-11T11:30:33.950 回答