GregorianCalendar показывает нечетные значения? - PullRequest
0 голосов
/ 22 августа 2011

Хорошо.

calendar.get(Calendar.MONTH); 

возвращает индекс текущего месяца. Так, например, если бы эта строка кода должна была быть выполнена прямо сейчас, она вернула бы 7 за август.

Однако

calendar.get(Calendar.AUGUST); 

а также

calendar.get(Calendar.MONTH); in april

возвращает 3?

Это затрудняет получение правильных значений даты в зависимости от моего контекста разработки.

Может кто-то пролить свет на меня, почему это так?

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

Вы не должны использовать calendar.get(CALENDAR.AUGUST) - это использует константу, представляющую значение , как если бы она была константой, представляющей тип поля . К сожалению, API Calendar настолько плохо спроектирован, чтобы позволить этому случиться, ИМО, но вам действительно нужно понять, почему это не имеет смысла.

Дата в апреле возвращает 3 по той же причине, что дата в августе возвращает 7 - месяцы основаны на 0 в Calendar. Я удивлен, что вы были счастливы, когда август вернул 7, но смутился, когда апрель вернул 3 ...

В любом случае, из документов на Calendar.MONTH:

Номер поля для получения и установки с указанием месяца. Это значение для календаря. Первый месяц года в григорианском и юлианском календарях - ЯНВАРЬ, который равен 0; последнее зависит от количества месяцев в году.

Я бы настоятельно посоветовал бы вам изучить Joda Time , если вы делаете что-то даже немного нетривиальное в Java с датами и временем - это много разумнее и выразительнее API, чем Date / Calendar.

1 голос
/ 22 августа 2011

Это совершенно не связано с Android.java.util.Calendar имеет плохой интерфейс, но вы тоже используете его неправильно.calendar.get(Calendar.MONTH) возвращает текущий месяц, где январь = 0, calendar.get(Calendar.AUGUST) не имеет смысла.Значение const для AUGUST равно 7, что совпадает с Calendar.DAY_OF_WEEK, поэтому вы фактически получаете день недели (ВТОРНИК).Короче, не делай этого.

1 голос
/ 22 августа 2011

Calendar.get () принимает целое число со значениями, такими как 2, чтобы запросить месяц, или 7, чтобы запросить день недели.MONTH и DAY_OF_WEEK являются окончательными значениями, предоставленными для более удобного определения этих значений.

Финальное значение int AUGUST также имеет значение 7 (такое же, как DAY_OF_WEEK), но не предназначено для передачи в get (), это просто полезная int, соответствующая значению, возвращаемому как месяц в августе (месяцы Java основаны на нуле.)

Следовательно, не имеет смысла передавать AUGUST get ().Эта путаница является пережитком предыдущих дней Java.Если бы класс Calendar был разработан для использования перечислений, все было бы яснее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...