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
Я думаю, что это ошибка, если не сказать мне причину, пожалуйста.
Ответы
Ответ 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 в месяц, потому что месяц отсчитывается от нуля