Я только что попробовал метод java.util.Calendar getActualMaximum()
, чтобы узнать, могу ли я получить максимальное количество дней в месяц с учетом года. Вот мой код:В java.util.Calendar, почему установка значения Calendar.YEAR влияет на значение Calendar.MONTH?
public static void main(String[] args) {
Calendar c = Calendar.getInstance(); // today is July 29, 2012
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
c.set(Calendar.MONTH, Calendar.FEBRUARY); // set to February 2012
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
c.set(Calendar.YEAR, 2011); // set year to 2011, now February 2011
System.out.println(c.get(Calendar.MONTH) + " " + c.getActualMaximum(Calendar.DATE) + " " + c.get(Calendar.YEAR));
}
Выход Я ожидаю, что это:
6 31 2012 // last day of July 2012 is 31
1 29 2012 // last day of Feb 2012 is 29
1 28 2011 // last day of Feb 2011 is 28
Однако, это то, что я получаю:
6 31 2012
1 29 2012
2 31 2011 // HUH?
(В java.util.Calendar , значения месяца начинаются от 0 до 11 за период с января по декабрь, а дни самих месяцев начинаются с 1.)
Почему mon th вдруг установлен на Calendar.MARCH? Что здесь происходит, и что я могу сделать, чтобы получить последние дни данного месяца и года правильно? Я изучаю метод, потому что я не хочу настраивать свой собственный массив логических значений, где это верно для индексов, которые представляют 31-дневные месяцы, а false для нет.
Только один из многих классов, которые расстраивают меня при использовании Java. –
Я все равно создал булевский массив. Это гораздо надежнее, чем придумать обходные пути для недостатков API Календаря. –