比较特定时间间隔的不同格式的纪元日期
Comparing epoch dates in different formats for a specific time gap
从 Jenkins 捕获最后的构建日期给我一个格式为 1493146210998
的纪元日期,而今天的日期(在撰写本文时大致如此)是 1493146250
。显然他们在不同的单位。
我需要检查这两个日期,并确定 "right now" 是否比 jenkins 时间戳至少晚八小时。我认为我正确地转换了第一个时间戳以匹配第二个时间戳的单位(跳水 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."
}
如何检查这两个时间间隔是否小于八小时?如果在八小时后得到答复,请随意替换今天的日期。
您可以在 if-clause
中使用 bash
算术运算符 $((..))
作为
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 有 bash
的原生 Mac OS X
版本,它没有 GNU 工具包,也没有 GNU date
命令,所以算术为
jenkinsBuild="1493146210998"
if (( $(( ($(date +%s) - ${jenkinsBuild:0:10} )/(60*60) )) < 8 )); then
echo "Times are too close together."
fi
在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
从 Jenkins 捕获最后的构建日期给我一个格式为 1493146210998
的纪元日期,而今天的日期(在撰写本文时大致如此)是 1493146250
。显然他们在不同的单位。
我需要检查这两个日期,并确定 "right now" 是否比 jenkins 时间戳至少晚八小时。我认为我正确地转换了第一个时间戳以匹配第二个时间戳的单位(跳水 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."
}
如何检查这两个时间间隔是否小于八小时?如果在八小时后得到答复,请随意替换今天的日期。
您可以在 if-clause
中使用 bash
算术运算符 $((..))
作为
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 有 bash
的原生 Mac OS X
版本,它没有 GNU 工具包,也没有 GNU date
命令,所以算术为
jenkinsBuild="1493146210998"
if (( $(( ($(date +%s) - ${jenkinsBuild:0:10} )/(60*60) )) < 8 )); then
echo "Times are too close together."
fi
在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