我正在制作一个蚂蚁脚本。在这个特定的部分,我需要获得当前月份以及上个月。我在想类似于
的东西<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="?">
我一直在读财产助手,但我无法得到我需要的东西。 有任何想法吗?
提前致谢。
答案 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>