-2

I'm new to android How to do disable future date in date picker, I tried many codes in stack over flow but it couldn't help.can anybody help me pleas.

Have a look Code

public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.daty);



                click=(ImageView)findViewById(R.id.click);


                hdate=(TextView)findViewById(R.id.hdate);

                timeStamp = new SimpleDateFormat("dd/MM/yyyy").format(new Date(System.currentTimeMillis()));


                hdate.setText(timeStamp);


                final Calendar myCalendar = Calendar.getInstance();

       // listener for date picker        
                final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear,
                            int dayOfMonth) {
                        // TODO Auto-generated method stub
                        myCalendar.set(Calendar.YEAR, year);
                        myCalendar.set(Calendar.MONTH, monthOfYear);
                        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        updateLabel();
                    }

                    private void updateLabel() {
                        // TODO Auto-generated method stub

                        String myFormat = "dd/MM/yyyy";
                        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                        hdate.setText(sdf.format(myCalendar.getTime()));


                    }

                };

//texview listener
                hdate.setOnClickListener(new OnClickListener() {


                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        new DatePickerDialog(Daty.this, date, myCalendar
                                .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                                myCalendar.get(Calendar.DAY_OF_MONTH)).show();


                    }


                });
Naveen Tamrakar
  • 3,349
  • 1
  • 19
  • 28
Aravind
  • 41
  • 1
  • 2
  • 12

4 Answers4

9

You can simply use setMaxDate function for the date picker.

DatePickerDialog datePickerDialog = new DatePickerDialog(getApplicationContext(), date, Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH);  //date is dateSetListener as per your code in question
datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());

Refer documentation

Hope this helps.

MysticMagicϡ
  • 28,593
  • 16
  • 73
  • 124
  • having another doubt,is there any possibilities in date picker start from a particular month and year – Aravind Oct 07 '14 at 08:26
  • yes. @Aravind Just pass the year, month and day of month as per your requirement in `DatePickerDialog datePickerDialog = new DatePickerDialog(getApplicationContext(), date, Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH);` – MysticMagicϡ Oct 07 '14 at 08:27
  • Thanks it help me – Jatinkumar Patel Jul 04 '17 at 14:20
  • There is one scenario where a user can able to select the future date. say now it is 27-10-2017. select 31-10-2016 and save it and then select the picker again just change only the year to 2017 now it becomes 31-10-2017. which is now a future date. Now have to put a validation before saving it. :( – Asif Sb Oct 27 '17 at 07:10
0

I use this code in my project:

 Calendar calendar = Calendar.getInstance();
                            calendar.set(year,monthOfYear,dayOfMonth);

                            long selectedTimeInMillis = calendar.getTimeInMillis();
                            long systemTimeInMillis = Calendar.getInstance().getTimeInMillis();
                            if(selectedTimeInMillis<=systemTimeInMillis){
                                setDate(year,monthOfYear,dayOfMonth);
                            }else{
                                Toast.makeText(getContext(),"Cannot select future date",Toast.LENGTH_SHORT).show();
                            }
Manikanta
  • 3,421
  • 4
  • 30
  • 51
0
 mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());


ed_date.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                Calendar mcurrentDate=Calendar.getInstance();
                year=mcurrentDate.get(Calendar.YEAR);
                month=mcurrentDate.get(Calendar.MONTH);
                day=mcurrentDate.get(Calendar.DAY_OF_MONTH);

                final DatePickerDialog   mDatePicker =new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday)
                    {
                              ed_date.setText(new StringBuilder().append(year).append("-").append(month+1).append("-").append(day));
                            int month_k=selectedmonth+1;

                    }
                },year, month, day);
                mDatePicker.setTitle("Please select date");
                // TODO Hide Future Date Here
                mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());

                // TODO Hide Past Date Here
                //  mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis());
                mDatePicker.show();
            }
        }); 

Its Working

Keshav Gera
  • 10,807
  • 1
  • 75
  • 53
-2
Use this :
public class MainActivity extends Activity {

    private TextView tvDisplayDate;
    private DatePicker dpResult;    

    private int mYear;
    private int mMonth;
    private int mDay;
    static final int DATE_DIALOG_ID = 1;

 //these variables are used to set max years need to set on Date Picker dialog...
    int minYear1 = 2000; 
    int minMonth1 = 0;//0-january , 1-february , 2-march..
    int minDay1 =1;

    int minYear = minYear1;
    int minMonth = minMonth1;
    int minDay = minDay1;

    //these are the minimum dates to set Datepicker..
    private int year;
    private int month;
    private int day;    

    public String dateOutput=null;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH); 

            setCurrentDateOnView();

        Button pickDate = (Button) findViewById(R.id.btnChangeDate);
        pickDate.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                        showDialog(DATE_DIALOG_ID);
                }
        });

    }

    // display current date
    public void setCurrentDateOnView() {

        System.out.println("----------setCurrentDateOnView()-----------");

        tvDisplayDate = (TextView) findViewById(R.id.tvDate);
        dpResult = (DatePicker) findViewById(R.id.dpResult);

        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);

        // set current date into textview
        tvDisplayDate.setText(new StringBuilder()
                // Month is 0 based, just add 1
                .append(month + 1).append("-").append(day).append("-")
                .append(year).append(" "));

        // set current date into datepicker
        dpResult.init(year, month, day, null);
    }


    //this was the main part in program to Restrict the DatePicker Dialog  to only its current date.
    @Override
    protected Dialog onCreateDialog(int id) {
        System.out.println("----------onCreateDialog()-----------");
        DatePickerDialog _date = null;

        switch (id) {
        case DATE_DIALOG_ID:
                _date =  new DatePickerDialog(this,  datePickerListener,
                        year, mMonth, mDay){
           @Override
           public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
           {   
               System.out.println("----------onDateChanged()-----------"+mYear+"--"+year);
               System.out.println("----------onDateChanged()-----------"+mMonth+"--"+monthOfYear);
               System.out.println("----------onDateChanged()-----------"+mDay+"--"+dayOfMonth);


              // These lines of commented code used for only setting the maximum date on Date Picker.. 

                if (year > mYear && year)
                   view.updateDate(mYear, mMonth, mDay);

                   if (monthOfYear > mMonth && year == mYear )
                   view.updateDate(mYear, mMonth, mDay);

                   if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                   view.updateDate(mYear, mMonth, mDay);


             /*  //these below lines of code used for setting the maximum as well as minimum dates on Date Picker Dialog..
               if (year < minYear)
                   view.updateDate(minYear, minMonth, minDay);

                   if (monthOfYear < minMonth && year == minYear  )
                   view.updateDate(minYear, minMonth, minDay );



                   if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
                   view.updateDate(minYear, minMonth, minDay);


                   if (year > mYear)
                   view.updateDate(mYear, mMonth, mDay);

                   if (monthOfYear > mMonth && year == mYear)
                   view.updateDate(mYear, mMonth, mDay);

                   if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
                   view.updateDate(mYear, mMonth, mDay);
*/
                  dateOutput = String.format("Date Selected: %02d/%02d/%04d", 
                                              dayOfMonth, monthOfYear+1, year);
                  // Log.d("Debug", dateOutput);

                  Toast.makeText(MainActivity.this,dateOutput,   Toast.LENGTH_SHORT).show();
           }
       };      
        }
         return _date;
    }


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

            System.out.println("----------onDateSet()-----------");                                

            year = selectedYear;
            month = selectedMonth;
            day = selectedDay;

            // set selected date into textview
            tvDisplayDate.setText(new StringBuilder().append(month + 1).append("-").append(day).append("-").append(year).append(" "));

            // set selected date into datepicker also
            dpResult.init(year, month, day, null);
        }
    };

}
Harsh Parikh
  • 3,845
  • 3
  • 14
  • 14