【问题标题】:Comparing epoch dates in different formats for a specific time gap比较特定时间间隔的不同格式的纪元日期
【发布时间】:2017-09-22 22:59:10
【问题描述】:

从 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 小时?如果从现在起超过 8 小时得到答复,请随意替换今天的日期。

【问题讨论】:

    标签: bash date epoch


    【解决方案1】:

    您可以在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
    

    【讨论】:

    • 不确定是拼写错误还是用户错误,但我收到了line 2: (1493148707 - )/(60*60) : syntax error: operand expected (error token is ")/(60*60) ")
    • @Alex :这意味着您没有定义变量 jenkinsBuild ,正如您在问题中所声称的那样。定义并尝试返回
    • 我逐个复制了您的脚本字符 - 甚至使用echo 运行它以确保。 if 一定是失败了,但我对你的代码不够熟悉,不知道为什么
    • @Alex:jenkinsBuild 的值是多少?你能打印出来吗?另外,您可以在脚本开头使用#!/bin/bash 运行它吗
    • 添加路径和行echo $jenkinsBuild - 同样的错误。您拥有的东西是否可能与 mac bash 不兼容?我以前也遇到过这样的问题
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2016-11-02
      • 2019-11-14
      • 2017-05-30
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2011-03-28
      • 2015-01-23
      相关资源
      最近更新 更多