Set Limit on the DatePickerDialog in Android?

All the other answers seem rather convoluted, so I'm just going to state the obvious: you can get the underlying DatePicker from a DatePickerDialog (by simply calling getDatePicker()) and set its bounds using:

  • setMinDate(long minDate)
  • setMaxDate(long maxDate)

Where the argument is the usual number of milliseconds since January 1, 1970 00:00:00 in the default time zone. You'll still have to calculate these values of course, but that should be trivial to do with the Calendar class: just take the current date and add or substract x years.

The more attentive reader will notice that the aforementioned setters weren't available until API level 11. If you're targeting that (or newer) platform only, then you're good to go. If you also want to support i.e. Gingerbread devices (Android 2.3 / API level 9+), you can use a backported version of DatePicker in stead.


I am not in a position to give you the working code, since I am on a tour and didn't have access to my PC. but I can give you a way to achieve your aim (or so i think).

I am not sure this will work perfectly, but any way worth a try.

Pls try this code and inform me.

"DatepickerType" is an Integer public Member variable of the class.

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // when dialog box is closed, below method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        int y = Calendar.getInstance().get(Calendar.YEAR);
        switch(DatepickerType){
        case 1:
            if(selectedYear>(y-2)){
                //Add message if you want
                selectedYear = y-2;
            }
                else if(selectedYear<(y-12)) {
                //Add msg if u want
                    selectedYear = y-12;
            }

        case 2:
            if(selectedYear>(y)){
                //Add message if you want
                selectedYear = y;
            }
                else if(selectedYear<(y-2)) {
                //Add msg if u want
                    selectedYear = y-2;
            }
        }

        String year1 = String.valueOf(selectedYear);
        String month1 = String.valueOf(selectedMonth+1);
        String day1 = String.valueOf(selectedDay);
        //do what you need
        setLastStatus();

    }
};

Setting minumum and maximum date for the DatePickerDialog is not enough. User can click on the year and scroll in between years.

You should also set year range on the DatePicker like this:

datePicker.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR) + 1);