DatePickerDialog в Android, проверка даты

У меня есть простое действие, когда пользователю нужно выбрать дату (только дату, без времени). Мне нужно сделать правильную проверку. Во-первых, я подумал поместить dayOfMonth, monthOfYear и year в 3 разных текстовых представления, а затем использовать условия записи «if else», такие как (if day ‹= 0 или >= 31...). Код, который я пробовал:

        @Override
        public void onClick(View v) {
            final Calendar c = Calendar.getInstance();
            int mYear = c.get(Calendar.YEAR);
            int mMonth = c.get(Calendar.MONTH);
            int mDay = c.get(Calendar.DAY_OF_MONTH);

            datePickerDialog = new DatePickerDialog(Date.this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            tvDay.setText(dayOfMonth);
                            tvMonth.setText(monthOfYear);
                            tvYear.setText(year);


                        }
                    }, mYear, mMonth, mDay);
            datePickerDialog.show();
        }
    });

Но это не работает, я могу поместить dayOfMonth, monthOfYear год только в 1 текстовое представление. Как это:

       public void onClick(View v) {
            final Calendar c = Calendar.getInstance();
            int mYear = c.get(Calendar.YEAR);
            int mMonth = c.get(Calendar.MONTH);
            int mDay = c.get(Calendar.DAY_OF_MONTH);

            datePickerDialog = new DatePickerDialog(Date.this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            tvDate.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                        }
                    }, mYear, mMonth, mDay);
            datePickerDialog.show();
        }
    });
}

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

Спасибо.


person Yevhenii Ivanisenko    schedule 04.10.2017    source источник
comment
Зачем вам нужна проверка здесь? вам не нужна проверка, если вы используете datepickerdialog   -  person Vinayak B    schedule 04.10.2017


Ответы (2)


Вы можете использовать SimpleDateFormat, а затем calanderObject.getTime() даст вам хорошо отформатированную дату в виде String

Здесь я передаю ссылку на TextView внутри метода. Хотя это не важно.

private void setDate(final TextView tV) {
    final Calendar cal = Calendar.getInstance();

    DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
            cal.set(year, monthOfYear, dayOfMonth);
            tV.setText(dateFormat.format(cal.getTime()));
        }
    }, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
    dialog.show();
}
person Daksh Gargas    schedule 04.10.2017

Деннис прав, я просто хочу добавить, что для проверки даты вы можете использовать объект календаря, в нем есть все эти классные операции, такие как сопоставление с сегодняшней датой, например

if(someDate >= now){ ...

это намного проще, чем попытаться реализовать его самостоятельно, если у вас есть расчет, который должен учитывать високосный год (день 29/2 каждые 4 года), вам следует использовать GregorianCalendar, который наследуется от Calendar .

https://developer.android.com/reference/java/util/GregorianCalendar.html

person Moshe Edri    schedule 04.10.2017