从Jenkins捕获最后一个构建日期给我一个1493146210998
格式的纪元日期,而今天的日期是(大致在撰写本文时)1493146250
。显然他们在不同的单位。
我需要查看这两个日期,然后找出现在是""比詹金斯时间戳至少晚八个小时。我想我正确地将第一个时间戳转换成与第二个时间戳相匹配(跳过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."
}
如何检查这两次是否相隔不到八小时?如果从现在开始超过八小时回答,请随意替换今天的日期。
答案 0 :(得分:1)
您可以在bash
中使用$((..))
算术运算符if-clause
作为
jenkinsBuild="1493146210998"
if (( $(( ($(date +%s) - $(date -d@${jenkinsBuild:0:10} +%s))/(60*60) )) < 8 )); then
echo "Times are too close together."
fi
我们的想法是从jenkinsBuild
变量中获取10位数字并执行GNU日期算术以获得EPOCH值(以小时为单位)并查看它是否小于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
答案 1 :(得分:0)
在bash v4.4+
中,您可以使用纯粹的bash,例如:
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