2013-10-05 22 views
0

以下是两条日志的第一行和最后一行,我想知道这两个日志之间的时间差。两个时间点之间的时间差,如果它们在shell脚本中运行超过一天

INFO 2013年10月2日02:13:36200 vert.x-事件循环线程1 2514751586306/entityCrawl] [oiq.whiteboard.CrawlHandler] - 公司启动

INFO 2013年10月5日2点13分:36,200 vert.x-事件循环线程1 [2514735333378/entityCrawl] [oiq.whiteboard.CrawlHandler] - 公司完成[4293663毫秒]

我用下面的程序

#!/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日2时13分36秒

终止时间= 05 2013年10月2时13分36秒

timeDiff测量= 72:00:00

+1

你只是减去的秒数,你为什么期望它自动转换成小时?如果您想将秒转换为小时,分钟和秒,则必须自己进行分区。 – Barmar

+0

本程序仅在几秒内给我,但当日期发生变化时,它不会显示正确的时间差 – Navinjeth

回答

1

date给你一天的时间,而不是时间。它足够简单,可以将差值转换为小时,分钟,秒,这是一个简单的算术问题。

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

猛砸甚至可以让你把所有的数学到一个单一的算术表达式,如果你想:

(( 
    hours = diff/3600, 
    mins = (diff - hours*3600)/60, 
    secs = diff % 60 
)) 
相关问题