DatePicker показывает неправильное значение месяца - PullRequest
47 голосов
/ 17 декабря 2010

У меня проблема в DatePicker в Android, когда я использую метод getMonth(), тогда он вернет неправильное значение.

Например:

DatePicker datepicker=new DatePicker();

int day=date.getDayOfMonth();
int month=date.getMonth();
int year=date.getYear();

t.setText(""+day+" / "+month+" / "+year);

Если я выберу 6 августа 1987 года, он вернется 6/7/1987

Я думаю, что это ошибка, если не сообщите мне причину, пожалуйста.

Ответы [ 5 ]

74 голосов
/ 17 декабря 2010

Как описано в Android SDK , месяцы индексируются, начиная с 0. Это означает, что август - это месяц 8, или индекс 7, что дает вам правильный результат.

Просто добавить 1 к индексу, возвращенному API, чтобы получить традиционный месяц с одним индексом.

Хотя это может показаться странным, оно соответствует классу java.util.Calendar (хотя не соответствует joda.time.DateTime).

30 голосов
/ 10 декабря 2012

В Android, когда вы выбираете дату из средства выбора даты, он начинает считать месяцы с 0. Таким образом, это означает, что возвращаемое значение месяца всегда равно месяцу-1.

Например, если вывыберите август (8-й месяц), затем он возвращает 8−1 = 7.

Это означает, что вам нужно добавить 1 к значению месяца, которое вы получаете из DatePicker.

Вы можете сделать это следующим образом:

DatePicker datepicker = new DatePicker();

int day   = date.getDayOfMonth();
int month = date.getMonth()+1;  // here I added 1 to the month
int year  = date.getYear();

t.setText(day+" / "+month+" / "+year);
3 голосов
/ 21 апреля 2014

Причина, по которой я могу подумать, почему это было в Java утилите, такова:

Рассмотрим дни с 1 января по 31 января.

День, например 22 января, можно считать 0 месяцем + 22 дня того года. Принимая во внимание, что 15 февраля можно указать как: 1 месяц + 15 дней этого года.

Аналогично 10 декабря можно указать как: 11 месяцев + 10 дней этого года.

Следовательно, январь-декабрь упоминается как 0-11.

3 голосов
/ 30 сентября 2013

Вы можете использовать следующий код:

String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()): 
String.valueOf(this.datepicker.getMonth());
2 голосов
/ 17 декабря 2010

В этом нет ошибки. Подсчет месяцев в классе Calendar начинается с нуля. см. Это.

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