有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在编写一个ant脚本。在这一部分中,我需要得到当前月份以及上个月的数据。我在想类似的事情

<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) 个答案

  1. # 1 楼答案

    您可以使用自定义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>
    
  2. # 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}"/>
    
  3. # 3 楼答案

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

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

    这会返回两天前的时间戳。我希望你能做同样的事情,如果你的模式是几个月,那么补偿可能会在几个月内工作

  4. # 4 楼答案

    实际上,您可以使用:

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

    因此,在之前的两个月内,您使用:

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