我需要使用 Ant 计算时差。
基本上它有2个变量。一个分配了当前时间,另一个分配了不同的时间。我需要使用 Ant 获取时差。像下面的东西。如果有人有代码请回复。
variable a = current time;
variable b = different time
echo (a - b) ;
这是一个更简单的解决方案:
<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>
替代@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>
注意:
这不考虑毫秒
更新来考虑毫秒
<?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>
如果您不想使用 JavaScript,可以使用Ant-Contrib实用程序提供的Math 任务。
Ant-Contrib 相当老了,我不知道是否还有人在维护它们,但是它们在 Ant 构建文件中非常流行,因为它们添加了一些非常有用的任务。
我建议将其包含ant-contrib-1.0b3.jar
到项目本身中。当其他人使用您的项目时,他们也将拥有 Ant-Contrib jar。我放在ant-lib/ac/ant-contrib-1.0b3.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:
是在您的实体中声明的 XML 命名空间,并通过实体中的参数<project/>
连接到您的任务。这允许您拥有多个可选的 Ant 任务,这些任务可能具有重复名称的任务。如果您使用具有相同任务名称的多个可选任务库,这是一个好主意。uri
<taskdef/>