Это уже упоминалось в комментариях Захура Салима и TheWanderer, но это заслуживает ответа: номер месяца, который вы получаете от CalendarDay
, равен «0», то есть 0 для января и т. Д.., через 11 за декабрь.Так, например, если вы выберете дату в октябре, вы получите 9, что Month
вполне естественно понимать как сентябрь.Как вы заметили, за месяц до этого.
Тривиальное решение - добавить 1:
// getMonth() is 0-based, so add 1
Month month = Month.of(date.getMonth() + 1);
Это не очень приятно.Если вы предпочитаете, есть альтернатива:
// getMonth() is 0-based, so use as index into the (0-based) array of Months
Month month = Month.values()[date.getMonth()];