Муравей: Как я могу вычесть два свойства (содержащие метки времени)? - PullRequest
3 голосов
/ 10 февраля 2010

Я работаю над сценарием муравья. В этой конкретной части мне нужно получить текущий месяц, а также предыдущий месяц. Я думал что-то похожее на

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

4 голосов
/ 10 февраля 2010

Вы можете сделать это с помощью специального 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 голосов
/ 10 февраля 2010

ANT's tstamp имеет элемент смещения:

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

Это возвращает мне метку времени на два дня назад. Я ожидаю, что вы могли бы сделать то же самое, если бы ваша модель была месяцами, тогда смещение, вероятно, работало бы в месяцах.

2 голосов
/ 10 февраля 2010

Я уверен, что некоторые регулярные выражения могут удивить, но я просто создал бы пользовательское задание.

В вашей задаче вы можете определить новое свойство с помощью метода 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}"/>
1 голос
/ 10 ноября 2010

На самом деле вы можете использовать:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...