С учетом того, что свойства являются неизменяемыми в ant, вам нужно сделать что-то здесь немного странное, в противном случае вы просто снова и снова регистрируете одну и ту же метку времени.
Использование antcall дает вам новый сеанс, что означает, что вы можете повторно использовать свойство, хотя оно немного неуклюже.
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<antcall target="_timestamp.echo">
<param name="message" value="@{message}" />
</antcall>
</sequential>
</macrodef>
<target name="_timestamp.echo">
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} ${message}"/>
</target>
Если вы используете Ant 1.8, вы можете использовать local, который намного чище
<macrodef name="timestamp.echo">
<attribute name="message"/>
<sequential>
<local name="current.time" />
<tstamp>
<format property="current.time" pattern="dd/MM/yyyy hh:mm:ss"/>
</tstamp>
<echo message="${current.time} @{message}" />
</sequential>
</macrodef>
А вот как это можно использовать
<target name="testTsEcho" depends="init" description="blah">
<timestamp.echo message="test" />
<sleep seconds="10" />
<timestamp.echo message="test2" />
</target>