Сегодня 31 мая.Объект Calendar
по умолчанию снисходительный , поэтому после первого set()
дата переключается на 31 февраля, которого не существует.Calendar
мягко исправляет это, переходя на 3 марта.Месяц 2
означает март.
Вторая операция set()
применяется к 3 марта, поэтому она переключается на 3 февраля, как и следовало ожидать.Месяц 1
означает февраль.
Это можно увидеть, отформатировав полную дату:
SimpleDateFormat sdf = new SimpleDateFormat();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MONTH, 1);
System.out.println(sdf.format(calendar.getTime()));
calendar.set(Calendar.MONTH, 1);
System.out.println(sdf.format(calendar.getTime()));
, которая возвращает
03/03/18 10:40
03/02/18 10:40
Если вы хотите предотвратить поведениевам нужно вызвать setLenient()
метод
Calendar calendar = Calendar.getInstance();
calendar.setLenient(false);
calendar.set(Calendar.MONTH, 1);
, что приведет к следующему IllegalArgumentException
исключению:
Исключение в потоке "main" javaИсключение