Как установить минимальную дату 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

Как мне это сделать?


person gsingh2011    schedule 01.12.2012    source источник


Ответы (8)


Ошибка говорит, что вы не можете установить минимальную дату точно сейчас. Попробуйте вычесть секунду:

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).

person Sam    schedule 01.12.2012
comment
Помимо приведенного выше решения, вы можете просто установить минимальные значения для этой конкретной даты, как указано здесь - person Mehul Joisar; 21.11.2014
comment
У меня это решение частично работает на 5.0.1 (Samsung S4) с DatePickerDialog. Я могу по-прежнему выбрать любую дату в текущем месяце. Однако я не могу выбрать дату из предыдущего месяца. - person Shubham A.; 31.08.2015
comment
Также можно использовать: setMinDate(Calendar.getInstance().getTimeInMillis()); - person ITJscott; 13.06.2016
comment
@ShubhamA Вы решили эту проблему, потому что это случилось и со мной. Я могу выбрать любую дату в текущем месяце. - person Khalid Ali; 24.01.2018
comment
- 1000 не работает для Kotlin в некоторых случаях :( - person J A S K I E R; 31.01.2021

Если вы не хотите использовать настраиваемый диалог. Используйте этот однострочный код:

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
person Nikhil Jain    schedule 02.07.2016
comment
По какой-то причине это не работает для устройств ниже 5.0. Отмеченный ответ работает для всех случаев. - person Ramesh; 06.12.2016
comment
Это приведет к тому же исключению, что и описанный OP (по крайней мере, для Android API 16 и 18), и это просто другой способ выбора средства выбора даты. - person coffeemakr; 12.05.2018

Проверьте DatePickerDialog Android, задайте код минимальной и максимальной даты.

Вот примеры .

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 
person Saiful Alam    schedule 09.05.2015
comment
Пожалуйста, избегайте ответов только по ссылке - person rmuc8; 09.05.2015

Это отлично сработало для меня. легко и приятно.

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

        dialog.getDatePicker().setMinDate(Calendar.getInstance().getTimeInMillis());
        dialog.show();
person Satyajit    schedule 27.06.2018

Добавление этой строки в ваш фрагмент DatePicker установит минимальную дату как текущую дату и отключит предыдущие месяцы.

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
person TechInsect    schedule 19.04.2017

Это может помочь вам.

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);
person Ali Imran    schedule 01.12.2012
comment
Я не хочу устанавливать дату по умолчанию, я хочу установить минимальную дату, которую может выбрать пользователь. - person gsingh2011; 01.12.2012
comment
Упс, хорошо, я проверю :) - person Ali Imran; 01.12.2012

Попробуй это

datePicker.setMinDate(new GregorianCalendar.getTimeInMillis());
person Robin Chander    schedule 01.12.2012
comment
какой-то комментарий поможет этому ответу - person dove; 01.12.2012

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

Минимальная дата не может быть мгновенным моментом

person Pierre Alexandre    schedule 23.04.2020