如何将最小 DatePicker 日期设置为当前日期

Posted

技术标签:

【中文标题】如何将最小 DatePicker 日期设置为当前日期【英文标题】:How to set minimum DatePicker date to current date 【发布时间】:2012-11-19 15:38:47 【问题描述】:

我想将用户可以在 DatePicker 中选择的最短日期设置为当前日期。我试过这个:

DatePicker datePicker = (DatePicker) findViewById(R.id.event_date);
datePicker.setMinDate(System.currentTimeMillis());

这给了我以下例外:

12-01 12:23:31.226: E/androidRuntime(10311): Caused by: java.lang.IllegalArgumentException: fromDate: Sat Dec 01 12:23:31 EST 2012 does not precede toDate: Sat Dec 01 12:23:31 EST 2012

我该怎么做?

【问题讨论】:

【参考方案1】:

错误提示您现在无法将最短日期设置为准确。尝试减去一秒:

datePicker.setMinDate(System.currentTimeMillis() - 1000);

从源代码来看,最小日期必须早于当前日期,而不是等于当前日期:

if (date.before(mMinDate)) 
    throw new IllegalArgumentException("fromDate: " + mMinDate.getTime()
            + " does not precede toDate: " + date.getTime());

所以你只需要从现在减去足够的时间 (System.currentTimeMillis()) 传递 date.before(mMinDate)

【讨论】:

除了上述解决方案之外,您可以简单地设置该特定日期的最小值,如 here 此解决方案在 5.0.1 (Samsung S4) 上部分适用于 DatePickerDialog。我可以仍然选择当前月份的任何日期。但是,我无法选择上个月的日期。 也可以使用:setMinDate(Calendar.getInstance().getTimeInMillis()); @ShubhamA 你解决了这个问题吗,因为它也发生在我身上。我可以选择当月的任何日期。 - 1000 在某些情况下不适用于 Kotlin :(【参考方案2】:

如果您不想使用自定义对话框。使用这个单行代码:

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

【讨论】:

由于某种原因,这不适用于 5.0 以下的设备。标记的答案适用于所有情况。 这将导致与所描述的 OP 相同的异常(至少在 Android API 16 和 18 上),它只是选择日期选择器的不同方式。【参考方案3】:

检查Android DatePickerDialog设置最小最大日期代码。

这里是examples。

final Calendar c = Calendar.getInstance();  
    int year = c.get(Calendar.YEAR);  
    int month = c.get(Calendar.MONTH);  
    int day = c.get(Calendar.DAY_OF_MONTH);  
DatePickerDialog dpd = new DatePickerDialog(getActivity(),AlertDialog.THEME_TRADITIONAL,this,year, month, day);  

    //Get the DatePicker instance from DatePickerDialog  
    DatePicker dp = dpd.getDatePicker();  
    //Set the DatePicker minimum date selection to current date  
    dp.setMinDate(c.getTimeInMillis());//get the current day  
    //dp.setMinDate(System.currentTimeMillis() - 1000);// Alternate way to get the current day  

    //Add 6 days with current date  
    c.add(Calendar.DAY_OF_MONTH,6);  

    //Set the maximum date to select from DatePickerDialog  
    dp.setMaxDate(c.getTimeInMillis());  
    //Now DatePickerDialog have 7 days range to get selection any one from those dates 

【讨论】:

请避免仅链接的答案【参考方案4】:

这对我来说非常有效。简单又漂亮。

DatePickerDialog dialog = new DatePickerDialog(this, this,
              Calendar.YEAR,Calendar.MONTH,
                Calendar.DAY_OF_MONTH);

        dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
        dialog.show();

【讨论】:

【参考方案5】:

将此行添加到您的 DatePicker Fragment 会将最短日期设置为当前日期并禁用前几个月。

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

【讨论】:

【参考方案6】:

这可以帮助你。

Calendar cal=Calendar.getInstance();

int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int day=cal.get(Calendar.DAY_OF_MONTH);
int hour=cal.get(Calendar.HOUR_OF_DAY);
int min=cal.get(Calendar.MINUTE);

datePicker.updateDate(year, month, day);

timePicker.setCurrentHour(hour);
timePicker.setCurrentMinute(min);

【讨论】:

我不想设置默认日期我想设置用户可以选择的最小日期。 糟糕,我会检查的:)【参考方案7】:

试试这个

datePicker.setMinDate(new GregorianCalendar.getTimeInMillis());

【讨论】:

一些评论将有助于这个答案【参考方案8】:
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 

DatePickerDialog dialog = new DatePickerDialog(this, this,
          Calendar.YEAR,Calendar.MONTH,
            Calendar.DAY_OF_MONTH);

    dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
    dialog.show();

【讨论】:

【参考方案9】:
datePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

最小的日期不能是瞬间

【讨论】:

【参考方案10】:

自定义日期

Calendar c = Calendar.getInstance();
c.set(2017, 0, 1);//Year,Month -1,Day
your_date_picker.setMaxDate(c.getTimeInMillis());

【讨论】:

以上是关于如何将最小 DatePicker 日期设置为当前日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery datepicker 上设置服务器日期

如何在 Xamarin 中为 DatePicker 添加最小日期验证检查

ReactJS + Material-UI:如何使用 Material-UI 的 <DatePicker> 将当前日期设置为默认值?

如何在 android 日期选择器中将特定选定日期设置为最小日期? [复制]

jquery ui中的datepicker日期选择,怎么样将当前日期之前的时间设为设为不能选中

JQuery datepicker设置手动日期不是日历的当前日期?