日期比较以限制用户选择直到当前日期

时间:2017-04-10 15:31:05

标签: android datetimepicker

我的应用程序中有一个DatePickerDialog,我想要将用户选择的日期限制在当前日期之前。我将从DatePickerDialog中选择的日期与newDate()进行比较,如果所选日期在之前,我会抛出错误。请找到如下代码。

DatePickerDialog datePickerDialog = new DatePickerDialog(this,
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year,
                                          int monthOfYear, int dayOfMonth) {
                        Calendar calendar = Calendar.getInstance();
                        calendar.set(year, monthOfYear, dayOfMonth);
                        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
                        String visitDate = dateFormat.format(calendar.getTime());
                        try {
                            Date appointDate = dateFormat.parse(visitDate);
                            Date currentDate = new Date();
                            if(appointDate.before(currentDate)){
                                appointmentDateInputLayout.setError("Date selected is not within range!");
                            }else{
                                appointmentDateEditText.setText(visitDate);
                                appointmentDateInputLayout.setError(null);
                            }
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                        appointmentDateEditText.setText(visitDate);
                    }
                }, mYear, mMonth, mDay);
        datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
        datePickerDialog.show();

但是当我这样做时,我也会因为选择今天的日期而收到错误。我希望用户允许当前日期。我在这里缺少什么?

请帮助。

2 个答案:

答案 0 :(得分:0)

尝试与日历getTime()方法而不是当前日期进行比较。:

 If(appointDate.before(calendar.getTime())

答案 1 :(得分:0)

看,

    Date currentDate = new Date() ;

在实例化时以毫秒为单位分配日期对象,因此交替分配并将日期对象放在代码的第一个将给出非常早的时间,因此您选择visitdate的时间最终将是更大(之后)所以currentDate中的毫秒数将小于挑选的新日期中的毫秒数