Вы не должны использовать calendar.get(CALENDAR.AUGUST)
- это использует константу, представляющую значение , как если бы она была константой, представляющей тип поля . К сожалению, API Calendar
настолько плохо спроектирован, чтобы позволить этому случиться, ИМО, но вам действительно нужно понять, почему это не имеет смысла.
Дата в апреле возвращает 3 по той же причине, что дата в августе возвращает 7 - месяцы основаны на 0 в Calendar
. Я удивлен, что вы были счастливы, когда август вернул 7, но смутился, когда апрель вернул 3 ...
В любом случае, из документов на Calendar.MONTH
:
Номер поля для получения и установки с указанием месяца. Это значение для календаря. Первый месяц года в григорианском и юлианском календарях - ЯНВАРЬ, который равен 0; последнее зависит от количества месяцев в году.
Я бы настоятельно посоветовал бы вам изучить Joda Time , если вы делаете что-то даже немного нетривиальное в Java с датами и временем - это много разумнее и выразительнее API, чем Date
/ Calendar
.