2012-06-28 3 views
1

Мне нужно рассчитать разницу во времени с помощью Ant.
В основном он имеет 2 переменные. Каждому назначается текущее время, а другое - другое время. Мне нужно получить разницу во времени с помощью Ant. Что-то вроде ниже. Если у кого-нибудь есть код, ответьте.Получить временную разницу с использованием Ant

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

Возможный дубликат [Выполнение простых вычислений с использованием собственных муравьев] (http://stackoverflow.com/questions/3619823/performing-simple-calculations-with-native-ant-tasks) – sudocode

ответ

0
<?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> 
+0

Спасибо Le Funes. – pathum83

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

Вот гораздо более простое решение:

<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> 
0

Если вы не хотите использовать JavaScript, вы можете использовать Math task, предоставляемый утилитами Ant-Contrib.

Ant-Contrib довольно старый, и я не знаю, поддерживает ли он их, но они очень популярны для использования в файлах сборки Ant, поскольку они добавляют некоторые очень полезные задачи.

Я рекомендую включить в проект непосредственно ant-contrib-1.0b3.jar. Когда другие люди используют ваш проект, они также будут иметь баню Ant-Contrib. Я положил 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/> сущности, и был связан с вашими задачами с помощью параметра uri в объекте <taskdef/>. Это позволяет вам иметь несколько необязательных задач Ant, которые могут иметь задачи с дублирующимися именами. Это хорошая идея, если вы используете несколько дополнительных библиотек задач с одинаковыми именами задач.

Смежные вопросы