Я просто столкнулся с странным поведением с классом GregorianCalendar, и мне было интересно, действительно ли я делал что-то плохое.
Это добавляется только в том случае, если месяц даты инициализации имеет фактический максимум, превышающий месяц, в который я собираюсь установить календарь.
Вот пример кода:
// today is 2010/05/31
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.MONTH, 1); // FEBRUARY
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
return cal.getTime(); // => 2010/03/03, wtf
Я знаю, что проблема вызвана тем фактом, что дата инициализации календаря составляет 31 день (может), что беспорядок с месяцем, установленным на февраль (28 дней). Исправить легко (просто установите day_of_month в 1 перед установкой года и месяца), но мне было интересно, действительно ли это было желаемое поведение. Любые мысли?