2017-04-25 47 views
0

從詹金斯捕獲最後建成的日期以1493146210998的格式給我劃分日期,而今天的日期(大致在撰寫本文時)1493146250。顯然他們在不同的單位。比較特定時間間隔的不同格式的歷元日期

我需要檢查兩個日期,並確定「現在」是否比jenkins時間戳至少晚8小時。我認爲我正確地將第一次時間戳轉換爲匹配第二次的單位(跳過1000),但涉及比較兩者的數學讓我失望。

這將在一個bash腳本中,並最終得到類似的東西;

jenkinsBuild="1493146210998" 
lastBuild=(`expr $jenkinsBuild/1000`) 
currentTime=(`date +%s`) 

if("$lastBuild" is less than eight hours before "$currentTime") { 
     echo "Times are too close together." 
    } 

如何檢查,如果兩個時間小於及八個小時?如果從現在開始超過八小時後得到答案,請隨時替換今天的日期。

回答

1

可以使用bash算術運算符$((..))if-clause作爲

jenkinsBuild="1493146210998" 
if (($((($(date +%s) - $(date [email protected]${jenkinsBuild:0:10} +%s))/(60*60))) < 8)); then 
    echo "Times are too close together." 
fi 

的想法是從jenkinsBuild變量獲得10個數字,並做GNU日期計算得到以小時爲單位的時代價值和看如果它小於8則使條件起作用。


似乎OP具有本地Mac OS X版本的bash,不具有GNU工具包,並沒有GNU date命令,所以做算術爲

jenkinsBuild="1493146210998" 
if (($((($(date +%s) - ${jenkinsBuild:0:10})/(60*60))) < 8)); then 
    echo "Times are too close together." 
fi 
+0

不知道,如果輸入錯誤或用戶錯誤,但我得到'2號線:(1493148707 - )/(60 * 60):語法錯誤:預期操作數(錯誤TOK en是「)/(60 * 60)」)' – Alex

+0

@Alex:這意味着您沒有定義變量'jenkinsBuild',就像您在問題中聲明的那樣。定義它並試試它 – Inian

+0

我複製了你的腳本角色 - 甚至用'echo'來運行它以確保它。它肯定會失敗,如果不知何故,但我不熟悉你的代碼知道爲什麼 – Alex

0

bash v4.4+你可以使用純慶典,像:

jenkinsBuild="1493146210998" 
diff=$(($(printf "%(%s)T") - (jenkinsBuild/1000))) 

((diff < 8*60*60)) && echo "Too close" || echo "OK" 

#or  
if ((diff < 8*60*60)); then 
     echo "Too close" 
else 
     echo OK 
fi