Подтвердить что ты не робот

DatePicker показывает неправильное значение месяца

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

Например:

DatePicker datepicker=new DatePicker();

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

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

Если я выберу aug 06 1987, то он вернется 6/7/1987

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

В 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

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

String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()): 
String.valueOf(this.datepicker.getMonth());

Ответ 4

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

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

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

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

Следовательно, Jan-Dec обозначается как 0-11.

Ответ 5

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

Ответ 6

Я добавил 1 в месяц, потому что месяц отсчитывается от нуля