Ant:如何减去两个属性(包含时间戳)?

时间:2010-02-10 18:10:02

标签: java date ant properties timestamp

我正在制作一个蚂蚁脚本。在这个特定的部分,我需要获得当前月份以及上个月。我在想类似于

的东西
<tstamp>
   <format property="thismonth" pattern="MMyy"/> <!-- 0210 by february 2010-->
</tstamp>

<!--I'd like to get 0110 (january 2010) here, but can't imagine how-->
<property name="priormonth" value="?">

我一直在读财产助手,但我无法得到我需要的东西。 有任何想法吗?

提前致谢。

4 个答案:

答案 0 :(得分:4)

您可以使用自定义JavaScript scriptdef执行此操作:

<project default="build">

    <target name="build">
        <echo message="Hello world"/>
        <setdates/>
        <echo message="thismonth ${thismonth}"/>
        <echo message="priormonth ${priormonth}"/>
    </target>

    <scriptdef name="setdates" language="javascript">
        <![CDATA[

            importClass(java.text.SimpleDateFormat);
            importClass(java.util.Calendar);

            today = new Date();

            cal = Calendar.getInstance();
            cal.setTime(today);
            cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);

            priormonth = cal.getTime();

            fmt = new SimpleDateFormat("MMyy");

            self.getProject().setProperty('thismonth', fmt.format(today));
            self.getProject().setProperty('priormonth', fmt.format(priormonth));

        ]]>
    </scriptdef>

</project>

答案 1 :(得分:2)

我确信一些正则表达式可以解决,但我只想创建一个自定义任务。

在您的任务中,您可以使用getProjet().setProperty()方法定义新属性。

以下内容应该足够了:

public class PreviousMonthTask extends Task {

    private String currentDate;
    private String propertyName;

    public void setCurrentDate(String currentDate) {
        this.currentDate = currentDate;
    }

    public void setPropertyName(String propertyName) {
        this.propertyName = propertyName;
    }

    @Override
    public void execute() throws BuildException {
        // calculate the previous month
        String previousMonth = ...;
        getProject().setProperty(this.propertyName, previousMonth);
    }

}

剩下要做的是定义一个属性文件,其中包含指向该类的链接:

previousmonth = org.myproject.PreviousMonthTask

加载任务时(请参阅Ant文档),您只需使用以下命令调用您的任务:

<previousmonth propertyName="previous" currentDate="${current}"/>

答案 2 :(得分:2)

ANT的tstamp task有一个偏移元素:

<tstamp>
    <format property="twoDaysAgo" pattern="yyyy-MM-dd" offset="-2"/>
</tstamp>

这会给我两天前的时间戳。如果您的模式是几个月,我希望您能够做同样的事情,那么抵消可能会在几个月内发挥作用。

答案 3 :(得分:1)

实际上你可以使用:

<tstamp>
    <format property="twoDaysAgo" pattern="yyyy-MM-dd" unit="day" offset="-2"/>
</tstamp>

因此,您使用前2个月:

<tstamp>
   <format property="twoDaysAgo" pattern="yyyy-MM-dd" unit="month" offset="-2"/>
</tstamp>