Calendar.getActualMaximum(Calendar.DAY_OF_MONTH) всегда возвращает 31

у меня есть этот код для расчета последнего дня предыдущего месяца месяца, выбранного пользователем. Переменная monthNumber дает мне месяц, выбранный моим пользователем:

        lastDayOfPreviousMonth.set(Calendar.YEAR, year);
        lastDayOfPreviousMonth.set(Calendar.MONTH, monthNumber-1);
        lastDayOfPreviousMonth.set(Calendar.DAY_OF_MONTH , lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH));

проблема в том, что lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)); дает мне всегда 31. ¿Почему?

Благодарность


person NullPointerException    schedule 08.01.2015    source источник
comment
используйте lastDayOfPreviousMonth.getMaximum вместо getActualMaxium. Я чувствую, как только вы это увидите, вы поймете разницу :-/   -  person Panther    schedule 08.01.2015
comment
@Panther: getMaximum говорит for any possible time value. Я не думаю, что это сработает.   -  person njzk2    schedule 08.01.2015
comment
Можете ли вы указать фактические значения, которые вы тестировали для year и monthNumber?   -  person njzk2    schedule 08.01.2015
comment
year — это год, а monthnumber имеет значение от 0 до 11.   -  person NullPointerException    schedule 08.01.2015


Ответы (2)


Это неподходящий способ получить максимальное количество дней в предыдущем месяце. Попробуйте следующее:

calendarPreviousMonth.add(Calendar.MONTH, -1);
person Willis    schedule 08.01.2015

Я проверил вашу программу и просто добавил необходимые объявления и отформатировал вывод:

GregorianCalendar lastDayOfPreviousMonth = new GregorianCalendar(2012, 2, 1);
int month = 5; // May (here 1-based month)

lastDayOfPreviousMonth.set(Calendar.YEAR, 2015);
// 2 for one-based month-input and previous month
lastDayOfPreviousMonth.set(Calendar.MONTH, month - 2);
lastDayOfPreviousMonth.set(
    Calendar.DAY_OF_MONTH,
    lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)
);

System.out.println(lastDayOfPreviousMonth.getActualMaximum(Calendar.DAY_OF_MONTH)); 
// output: 30

System.out.println(DateFormat.getDateInstance().format(lastDayOfPreviousMonth.getTime()));
// output: 30.04.2015

Меня устраивает. Возможно, вам следует проверить свою инициализацию и/или использовать этот пример кода на Dalvik VM.

person Meno Hochschild    schedule 08.01.2015