两个时间之间的时间差,如果它们在shell脚本中运行超过一天

时间:2013-10-05 07:05:39

标签: shell

以下是两个日志第一行和最后一行我想知道这两个日志之间的时差。

  

INFO 02 Oct 2013 02:13:36,200 vert.x-eventloop-thread-1 [2514751586306 / entityCrawl] [oiq.whiteboard.CrawlHandler] - 公司开始

     

INFO 05 Oct 2013 02:13:36,200 vert.x-eventloop-thread-1 [2514735333378 / entityCrawl] [oiq.whiteboard.CrawlHandler] - 公司完成[4293663 ms]

我使用了以下程序

#!/bin/bash
START=$(date --date="$1" +"%s")
ND=$(date --date="$2" +"%s")
DIFFSEC=$(($END-$START))
time=`date +%H:%M:%S -ud @${DIFFSEC}`
echo "$time" | awk -F':'  '{ print $1*3600 + $2*60 + $3 }'

但它没有给我正确的时差请给我一个程序来解决这个问题

预期产出:

  

开始时间= 2013年10月2日02:13:36

     

结束时间= 2013年10月5日02:13:36

     

timeDiff测量= 72:00:00

1 个答案:

答案 0 :(得分:1)

date为您提供一天中的时间,而不是持续时间。它很简单,可以将diff值转换为小时,分钟,秒,这是一个简单的算术问题。

diff=123456
(( hours = diff / 3600 ))
(( mins = (diff - hours*3600) / 60 ))
(( secs = diff % 60 ))
printf "%d:%02d:%02d\n" $hours $mins $secs
34:17:36

Bash甚至允许您将所有数学运算放入单个算术表达式中,如果您想:

(( 
    hours = diff / 3600,
    mins = (diff - hours*3600) / 60,
    secs = diff % 60 
))