Проверка поля «Дата рождения» в Android

В моем приложении у меня есть поле даты рождения, которое мне нужно проверить... Условие проверки состоит в том, что пользователь не должен выбирать текущую дату, и если он выбран, отображается сообщение об ошибке... Дата выбирается из DatePickerDialog этим способом:

private void updateDisplay() {
    tv_dob.setText(new StringBuilder()
    // Month is 0 based so add 1
            .append(mMonth + 1).append("-").append(mDay).append("-")

            .append(mYear - 1).append(" "));
}

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;
        updateDisplay();
    }
};


final Calendar c = Calendar.getInstance();
    year = c.get(Calendar.YEAR);
    month = c.get(Calendar.MONTH);
    day = c.get(Calendar.DAY_OF_MONTH);

    // set current date into textview
    tv_applndate.setText(new StringBuilder()
            // Month is 0 based, just add 1
            .append(month + 1).append("-").append(day).append("-")
            .append(year));

Как проверить это поле даты?


person shivani    schedule 08.07.2013    source источник
comment
что вы пробовали тогда? добавьте некоторую логику для проверки, например date < currDate   -  person NetStarter    schedule 08.07.2013
comment
Вы также можете использовать setMaxDate(long maxDate) (уровень API 11)   -  person Alexis C.    schedule 08.07.2013
comment
Сохраните текущую дату, т.е. день, месяц и год, в переменной и сравните с теми переменными, которые вы получаете из диалогового окна выбора даты после ввода пользователя.   -  person The Holy Coder    schedule 08.07.2013
comment
Ссылка здесь   -  person CRUSADER    schedule 08.07.2013


Ответы (4)


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

    private void setDateTimeField() {

    et_dob.setOnClickListener(this);
    dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US); //dd/MM/yyyy

    Calendar newCalendar = Calendar.getInstance();
    dobDatePickerDialog = new DatePickerDialog(getActivity(), new OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);

            Date current = newDate.getTime();
             int diff1 =new Date().compareTo(current);

                if(diff1<0){
                    Toast.makeText(getActivity(), "Please select a valid date",  Toast.LENGTH_LONG).show();
                    return;
                }
                else{
                    et_dob.setText(dateFormatter.format(newDate.getTime()));
                }

        }

    },newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));


}
person Gopal Sharma    schedule 06.08.2014

Вы можете попробовать это

et_dob.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID);
        }

    });
    final Calendar calendar = Calendar.getInstance();
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    if (et_dob.getText().toString() != null) {
        try {
            calendar.setTime(df.parse(et_dob.getText().toString()));
        } catch (java.text.ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        mYear = calendar.get(Calendar.YEAR);
        mMonth = calendar.get(Calendar.MONTH);
        mDay = calendar.get(Calendar.DAY_OF_MONTH);
        SimpleDateFormat month_date = new SimpleDateFormat("MMM");
        month = month_date.format(calendar.getTime());
    } else {
        mYear = calendar.get(Calendar.YEAR);
        mMonth = calendar.get(Calendar.MONTH);
        mDay = calendar.get(Calendar.DAY_OF_MONTH);
        SimpleDateFormat month_date = new SimpleDateFormat("MMM");
        month = month_date.format(calendar.getTime());
    }

    if (cal_currentTime.compareTo(calendar) > 0)
        updateDisplay();
}

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        mYear = year;
        mMonth = monthOfYear;
        mDay = dayOfMonth;

        String dateSetter = (new StringBuilder().append(mYear).append("-")
                .append(mMonth + 1).append("-").append(mDay).append(""))
                .toString();
        final Calendar cal = Calendar.getInstance();
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        if (dateSetter != null) {
            try {
                cal.setTime(df.parse(dateSetter));
            } catch (java.text.ParseException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            SimpleDateFormat month_date = new SimpleDateFormat("MMM");
            month = month_date.format(cal.getTime());
        }

        if (cal_currentTime.compareTo(cal) > 0)
            updateDisplay();
        else
            Toast.makeText(context, "Choose Proper date format",
                    Toast.LENGTH_SHORT).show();
    }
};

private void updateDisplay() {
    dateOfBirth = (new StringBuilder()
            // Month is 0 based so add 1
            .append(mYear).append("-").append(mMonth + 1).append("-")
            .append(mDay).append("")).toString();
    et_dob.setText(new StringBuilder()
            // Month is 0 based so add 1
            .append(mDay).append("-").append(month).append("-")
            .append(mYear));
}
person sarabu    schedule 08.07.2013

Используйте эту проверку в ondateset, метод compareTo возвращает 1, если больше, и -1, если меньше

Calendar cal = Calendar.getInstance();

        cal.set(year, month, day);
        Date current = cal.getTime();

        int diff1 =new Date().compareTo(current);

        if(diff1>0){
            Toast.makeText(ctx, "Please select a valid date.",  Toast.LENGTH_LONG).show();
            return;
        }
person Mahesh    schedule 08.07.2013

Все, что вам нужно сделать, это сравнить выбранную дату с текущей датой в системе внутри вашего OnDateSetListener.

    Calendar selectedCal = Calendar.getInstance();
    selectedCal.set(selectedYear, selectedMonth, selectedDay);
    Date selectedDate = selectedCal.getTime();
    Date currentDate = Calendar.getInstance().getTime();
    int diff1 = selectedDate.compareTo(currentDate);
    if(diff1>0){
        Toast.makeText(this,"Please select a valid date",  Toast.LENGTH_LONG).show();
        return;
    }
  // otherwise your date is valid  
person Ahmed Elsayed    schedule 29.09.2019