Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 比较特定时间间隔内不同格式的历元日期_Bash_Date_Epoch - Fatal编程技术网

Bash 比较特定时间间隔内不同格式的历元日期

Bash 比较特定时间间隔内不同格式的历元日期,bash,date,epoch,Bash,Date,Epoch,从Jenkins那里捕获最后一个构建日期,我得到了格式为1493146210998的纪元日期,而今天的日期大约是在编写1493146250时。显然,他们在不同的单位 我需要检查这两个日期,看看现在是否比詹金斯的时间戳晚了至少八个小时。我认为我正确地将第一个时间戳转换为与第二次跳水的单位1000相匹配,但是比较这两个单位所涉及的数学问题让我大吃一惊 这将是一个bash脚本,并将结束类似的东西 jenkinsBuild="1493146210998" lastBuild=(`expr $jenkin

从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."
    }
如何检查两次间隔是否少于8小时?如果从现在起八个多小时后得到答复,请随意替换今天的日期。

您可以使用bash算术运算符$。。在if子句中作为

在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

不确定是打字错误还是用户错误,但我得到的是第2行:1493148707-/60*60:语法错误:操作数预期的错误标记是/60*60@Alex:这意味着您没有定义jenkinsBuild变量,正如您在问题中所说的。定义它,然后再试一次。我一个字符一个字符地复制了你的脚本,甚至用回音运行它来确保。它一定是在if中失败了,但我对你的代码不太熟悉,所以不知道why@Alex:jenkinsBuild的价值是什么?你能把它打印出来吗?还有,你能用一个小键盘运行它吗/在脚本开头添加路径和echo$jenkinsBuild行的bin/bash-相同错误。是否有可能您的某些东西与mac bash不兼容?我以前也有过类似的问题
jenkinsBuild="1493146210998"
if (( $(( ($(date +%s) - ${jenkinsBuild:0:10} )/(60*60) )) < 8 )); then
    echo "Times are too close together."
fi
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