значения месяцев от 0 до 11; установите месяц равным 12, и дата станет «нормализованной», увеличив год на единицу и установив месяц равным 0. Это позволяет легко «добавлять месяц», не беспокоясь об обработке переполнения в конце года.
РЕДАКТИРОВАТЬ: январь = 0, февраль = 1, ... декабрь = 11. Когда вы установили значение месяца равным 12, вы запрашивали 13-й месяц, который нормализовался до первого месяца следующего года.
Обратите внимание, что этот процесс нормализации происходит в целом - попробуйте установить дату на 32 декабря, и вы вернетесь 1 января следующего года. Это означает, что важно соблюдать осторожность при изменении отдельных полей объекта Calendar. Если вы создаете Календарь по умолчанию, скажем, 31 января, а затем хотите изменить его, чтобы он содержал, например, 5 февраля, порядок, в котором вы устанавливаете поля, важен. Если вы сначала измените месяц, то создадите 31 февраля, который нормализуется до 2 или 3 марта (в зависимости от високосного года), а затем, когда вы установите день 5, результатом будет 5 марта, а не 5 февраля. В других случаях у вас возникает противоположная проблема, например, начиная с любой даты февраля и переходя на 30-е или 31-е число любого другого месяца. В этом случае выполнение первого месяца приводит к тому же типу проблемы.
Единственный безопасный способ изменить дату - это использовать метод, который устанавливает все три значения одновременно, например метод set (int, int, int).