Ant:如何比较时间戳?

时间:2012-05-08 12:45:45

标签: ant ant-contrib

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

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

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

另一种受欢迎的解决方案是仅在指定的时间间隔执行目标的方法,因此不需要进行检查。

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

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

1 个答案:

答案 0 :(得分:3)

有趣的问题,而且比我原先想的更难回答。

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

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

获得该时间戳后,您可以使用<condition>任务的 lastmodified 条件来查看特定文件是否已更新。如果您没有文件,可以使用<touch>任务创建一个文件。

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

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