android - 如何在 DatePickerDialog 中将当前日期设置为 MinDate

标签 android calendar datepickerdialog

我有一个用于创建客户的 Activity ,在这个 Activity 中我有一个编辑文本,可以在用户打开屏幕时显示当前日期。它可以更改为 future 的日期,但不能更改为过去的日期,所以我使用了

d2.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

将当前日期设置为最短日期,onClick 我打开了 DatePickerDialog。但是,当单击该编辑文本应用程序崩溃时,此错误显示在 Logcat 中。

java.lang.IllegalArgumentException: fromDate: Wed Aug 22 16:31:24 GMT+05:30 2018 does not precede toDate: Wed Aug 22 00:00:00 GMT+05:30 2018

这是我的 edittext onClickListner 代码。

Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DateUtil.dateFormatForDOB);
try {
    cal.setTime(sdf.parse(edt.getText().toString()));
} catch (ParseException e) {
    e.printStackTrace();
}

DatePickerDialog d2 = new DatePickerDialog(CreateUpdateOpportunityActivity.this, android.R.style.Theme_Holo_Light_Dialog_NoActionBar_MinWidth,
     new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int years,
                                      int monthOfYear, int dayOfMonth) {
                    year = years;
                    month = monthOfYear;
                    day = dayOfMonth;
                    tv.setText(DateUtil.getDateOfBirth(year + "-" + (month + 1) + "-" + day));
                }
            }, year, month, day);

d2.getDatePicker().setSpinnersShown(true);
d2.getDatePicker().setCalendarViewShown(false);
d2.updateDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH));
d2.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
d2.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
d2.show();
d2.setCanceledOnTouchOutside(false);

我使用了其他解决方案,例如

d2.getDatePicker().setMinDate(System.currentTimeMillis());

d2.getDatePicker().setMinDate(new Date().getTime() - 10000);

但应用程序仍然崩溃并出现相同的错误

如果我在代码行上方添加注释,我的应用程序运行时不会崩溃。

最佳答案

您需要检查日历日期 (cal.getTimeInMillis()) 是否比当前日期 (System.currentTimeMillis()) 更早

像这样

 if (cal.getTimeInMillis() < System.currentTimeMillis()) {
        // Toast.makeText(getApplicationContext(),"Current time is big",Toast.LENGTH_SHORT).show();
        d2.getDatePicker().setMinDate(cal.getTimeInMillis());
    } else {
        //  Toast.makeText(getApplicationContext(),"Current time is small",Toast.LENGTH_SHORT).show();
        d2.getDatePicker().setMinDate(System.currentTimeMillis());
    }

可能是这个帮助

关于android - 如何在 DatePickerDialog 中将当前日期设置为 MinDate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51966020/

相关文章:

android - 日期选择器对话框无法切换到 Android 7.0 设备上的微调器

android - 这些依赖项中的哪个包含包含 ELF 文件的 ZIP 文件?

android - 在Android中将视频上传到YouTube的特定 channel 上

javascript - React - useState 钩子(Hook)访问状态

java - Java java.util.Calendar 中语言环境设置的目的是什么?

打开 DatePickerDialog 时出现 android 致命异常 : java. lang.NullPointerException

安卓 : Thread does not start

Android:findViewById 返回 NULL - 无法找出问题所在?

java - 如何将日期转换为int数组?

Android 使用非公历