【问题标题】:Get timestamp difference using Ant使用 Ant 获取时间戳差异
【发布时间】:2012-06-28 11:38:31
【问题描述】:

我需要使用 Ant 计算时间差。
基本上它有2个变量。一个被分配当前时间,另一个具有不同的时间。我需要使用 Ant 获取时差。像下面的东西。如果有人有代码请回复。

variable a = current time;
variable b = different time
echo (a - b) ;

【问题讨论】:

标签: ant timestamp


【解决方案1】:

这是一个更简单的解决方案:

<script language="javascript">
  project.setProperty('startTime', new Date().getTime());
</script>
...
<script language="javascript">
  project.setProperty('elapsedTime', new Date().getTime() - startTime)
</script>
<echo>Elapsed time: ${elapsedTime} ms</echo>

【讨论】:

  • 这不适用于使用 Java 16 和 ant 1.9.13 的我。错误消息是Unable to create javax script engine for javascript。我是否需要一些可选组件才能使用 javascript?
【解决方案2】:

替代@LeFunes 答案(并使用tstamp 任务)

<tstamp prefix="task.start">
<format property="millis" pattern="SSS"/>
</tstamp>
<tstamp prefix="task">
  <format property="start" pattern="E, dd MMM YYYY hh:mm:ss"/>
</tstamp>
<time-consuming-task/>
<tstamp prefix="task.stop">
<format property="millis" pattern="SSS"/>
</tstamp>
<tstamp prefix="task">
  <format property="stop" pattern="E, dd MMM YYYY hh:mm:ss"/>
</tstamp>
<script language="javascript">
  project.setProperty("task.diff", 
    Math.abs(
      (Date.parse(project.getProperty("task.stop")) +
         +project.getProperty("task.stop.millis")) - 
      (Date.parse(project.getProperty("task.start")) + 
         +project.getProperty("task.start.millis"))))
</script>
<echo>
  task completed in ${task.diff} ms
</echo>

注意: 这不考虑毫秒 更新以考虑毫秒

【讨论】:

    【解决方案3】:
    <?xml version="1.0" encoding="UTF-8"?>
    <project name="TEST ANT" default="test" basedir="..">
        <target name="test" description="">
    
            <script language="javascript"> <![CDATA[
                var ts1 = new Date();
                project.setProperty("current.time.1", ts1.toLocaleString());
                project.setProperty("current.time.1.mill", ts1.getTime());
            ]]></script>
            <echo>Timestamp 1: ${current.time.1} [${current.time.1.mill}]</echo>
    
            <sleep milliseconds="1300"></sleep>
    
            <script language="javascript"> <![CDATA[
                var ts2 = new Date();
                project.setProperty("current.time.2", ts2.toLocaleString());
                project.setProperty("current.time.2.mill", ts2.getTime());
            ]]></script>
            <echo>Timestamp 2: ${current.time.2} [${current.time.2.mill}]</echo>
    
            <script language="javascript"> <![CDATA[
                project.setProperty("res", project.getProperty("current.time.2.mill")-project.getProperty("current.time.1.mill"));
            ]]></script>
            <echo>Diff: ${res}</echo>
        </target>
    </project>
    

    【讨论】:

      【解决方案4】:

      如果您不想使用 JavaScript,可以使用Ant-Contrib 实用程序提供的Math task

      Ant-Contrib 相当老了,我不知道是否还有人在维护它们,但它们在 Ant 构建文件中很受欢迎,因为它们添加了一些非常有用的任务。

      我建议将ant-contrib-1.0b3.jar 包含在项目本身中。当其他人使用您的项目时,他们也将拥有 Ant-Contrib jar。我将ant-lib/ac/ant-contrib-1.0b3.jar 放在您项目的主目录下。我对所有可选的 jar 都使用 ant-lib

      <project name="my.project"
          ...
          xmlns:ac="antlib:net.sf.antcontrib">
      
         ...
      
          <taskdef uri="antlib:net.sf.antcontrib"
              resource="net/sf/antcontrib/antlib.xml">
              <classpath>
                  <fileset dir="${basedir}/antlib/ac"/>
              </classpath>
          </taskdef>
      
          ....
      

      现在,您可以像这样使用数学任务:

          <ac:math result="time.diff"
              operation="-"
              operand1="${diff.time}"
              operand2="${initial.time}"/>
      

      ac: 是在 &lt;project/&gt; 实体中声明的 XML 命名空间,并通过 &lt;taskdef/&gt; 实体中的 uri 参数连接到您的任务。这允许您拥有多个可选的 Ant 任务,这些任务可能具有重复名称的任务。如果您使用多个具有相同任务名称的可选任务库,这是一个好主意。

      【讨论】:

        猜你喜欢
        • 2019-04-20
        • 2021-08-18
        • 2012-02-28
        • 1970-01-01
        • 2011-06-13
        • 2015-06-27
        • 2013-05-18
        • 2014-05-04
        • 2012-06-03
        相关资源
        最近更新 更多