Хобрук: Ваш путь к мастерству в программировании

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);

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

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

17.12.2010


Ответы:


1

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

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

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

17.12.2010
  • Если у вас есть массив с названиями месяцев, вы хотите, чтобы месяцы были проиндексированы нулем, чтобы соответствовать этому массиву. У дней нет этой проблемы, число - это все, чего все ожидают. 17.12.2010

  • 2

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

    Например, если вы выберете август (8-й месяц), он вернет 81 = 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);
    
    10.12.2012

    3

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

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

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

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

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

    21.04.2014

    4

    В этом нет никакой ошибки. Отсчет месяцев в классе Calendar отсчитывается от нуля. см.

    17.12.2010

    5

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

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

    6
    if (month >= 0){
       month = month+1;
     }
     yourTextArea.setText(dayOfMonth+" / "+month+" / "+year);
    

    У меня это сработало. Надеюсь, это сработает и для вас. Ешьте код сна, повторите????

    22.06.2020

    7

    Это полное решение в Котлине

    private var mYear = 0
    private var mMonth:Int = 0
    private var mDay:Int = 0
    private var updateDate: String = ""
    

    Показать диалоговое окно Datepicker

    val c: Calendar  = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR)
    mMonth = c.get(Calendar.MONTH)
    mDay = c.get(Calendar.DAY_OF_MONTH)
    val datePickerDialog = DatePickerDialog(
         requireContext(),
         OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
              val date = SimpleDateFormat("dd/MM/yyyy").parse("$dayOfMonth/$monthOfYear/$year")
              updateDate = "$dayOfMonth/${monthOfYear+1}/$year"
              }, mYear, mMonth, mDay)
    datePickerDialog.show()
    
    28.02.2021
    Новые материалы

    Как я могу подписаться на тему изображений в ROS Matlab и получить изображение RGB?
    Привет, Пожалуйста, как я могу извлечь изображение из сообщения ROS Image, за которым следует imshow? Я уже подписался на правильную тему, но message.getData() дает мне объект..

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..