2013-10-05 31 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 
)) 
相關問題