如何将最小 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 日期选择器中将特定选定日期设置为最小日期? [复制]