【问题标题】:Ant: How to compare timestamps?Ant:如何比较时间戳?
【发布时间】:2012-05-16 22:52:47
【问题描述】:

在一个长时间运行的 Ant 脚本中,我有一个大约每秒调用一次的目标。 (这可能不是一件好事,但让我们暂时接受它。)
我只希望它最后一次实际执行至少在五分钟前执行。

解决方案的一个想法是维护lastRunTimestamp 属性,并将当前时间与该属性进行比较。

问题:如何比较 Ant 中的时间戳?

另一个受欢迎的解决方案是只在指定的时间间隔执行目标,这样就不需要检查。

我正在使用 Ant 1.7.1 和 ant-contrib。

非常感谢任何想法 - 谢谢!

【问题讨论】:

    标签: ant ant-contrib


    【解决方案1】:

    有趣的问题,而且比我最初想象的更难回答。

    您可以使用<tstamp> 任务设置五分钟前的时间戳:

    <tstamp>
      <format property="time_stamp"
          offset="-5"
          unit="minutes"
          pattern="MM/dd/yyyy hh:mm:ss aa"/>
    </tstamp>
    

    一旦您有了那个时间戳,您就可以使用&lt;condition&gt; 任务的lastmodified 条件来查看特定文件是否已经更新。如果您没有文件,可以使用&lt;touch&gt; 任务创建一个。

    <condition property="has.been.modified">
         <islastmodified dateTime="${time_stamp}" mode="after">
            <file file="${touch.file}"/>
         </islastmodified>
    </condition>
    

    唯一的问题是默认属性是不可变的。一旦设置,您将无法更改它们。幸运的是,您正在使用 ant-contribant-contrib 允许您通过变量任务来更改它。

    【讨论】:

    • 酷,应该可以!但是,它需要一个临时文件。也许我可以使用&lt;tstamp&gt; 创建时间戳,而不是按字典顺序作为字符串进行比较?这将减少比较字符串的问题。不过不知道怎么做。
    • 找到了这个:stackoverflow.com/questions/7412894/ant-strings-comparison,结合您的回答,这是一个很好的解决方案。
    • 刚刚发现&lt;islastmodified&gt; 是Ant 1.8 的一个特性。在 Ant 1.7 中,必须寻找替代解决方案,例如将时间戳写入文件。
    • 我认为上例中的“格式”属性实际上应该是“模式”——所以pattern="MM/dd/yyyy hh:mm:ss aa"
    猜你喜欢
    • 1970-01-01
    • 2011-12-28
    • 2019-07-30
    • 2012-09-15
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2021-04-25
    相关资源
    最近更新 更多