Как установить минимальную дату DatePicker на текущую дату
Я хочу установить минимальную дату, которую пользователь может выбрать в 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
Как мне это сделать?
7 ответов:
ошибка говорит, что вы не можете установить минимальную дату ровно сейчас. Попробуйте вычесть секунду:
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)
.
Если вы не хотите использовать пользовательский диалог. Используйте этот однострочный код:
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
Проверьте Android DatePickerDialog set минимум и максимальная дата код.
здесь примеры.
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
добавление этой строки в ваш фрагмент DatePicker установит минимальную дату в качестве текущей даты и отключит предыдущие месяцы.
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
Это может помочь вам.
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);