2017-04-25 54 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