-2

In my application am trying DatePicker to set date.I want to set date picker Maximum date is as today date according to system date.i don't know how to set date picker maximum date as today date.May I know what is the correct way to achieve my objective?Maybe this question too basic, but i did't find any suitable solution.Please Help me out

Here is my code :

    public class UserDob extends Activity {

    TextView tvDisplayDate;
     DatePicker datePickerBirthday;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_dob);

        ActionBar ab = getActionBar(); 
        ab.setDisplayUseLogoEnabled(false);
        ab.setDisplayShowHomeEnabled(true);
        ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
        ab.setCustomView(R.layout.actionbar);
        ab.setDisplayHomeAsUpEnabled(true);
        ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#FFFFFF"));     
        ab.setBackgroundDrawable(colorDrawable);

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

         int currentapiVersion = android.os.Build.VERSION.SDK_INT;
            if (currentapiVersion >= 11) {
                datePickerBirthday.setCalendarViewShown(false);
            }

            SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
            String dateStr = sdfDateTime.format(new Date(System.currentTimeMillis()));

            String[] dateSplit = dateStr.split("-");
            int currentYear = Integer.parseInt(dateSplit[0]);
            int currentMonth = Integer.parseInt(dateSplit[1]);
            int currentDay = Integer.parseInt(dateSplit[2]);

            // to show date and day of week in the TextView
            setHumanReadableDate(currentYear, currentMonth, currentDay);

            // initialize date picker listener
            // currentMonth - 1, because on the picker, 0 is January
            datePickerBirthday.init(currentYear, currentMonth - 1, currentDay, birthdayListener);


    }
     // the date picker listener
   OnDateChangedListener birthdayListener = new OnDateChangedListener() {

       @Override
       public void onDateChanged(DatePicker birthDayDatePicker,
               int newYear, int newMonth, int newDay) {

           try{

               // currentMonth + 1, to retrieve proper month
               setHumanReadableDate(newYear, newMonth + 1, newDay);

           } catch (NullPointerException e) {
               e.printStackTrace();
           } catch (Exception e) {
               e.printStackTrace();
           }
       }
   };

   // show the user a better date format
   public void setHumanReadableDate(int newYear, int newMonth, int newDay){
       try {

           String clickedDate = newYear + "-" + newMonth + "-" + newDay;
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
           Date d = null;
            try {
                d = sdf.parse(clickedDate);
            } catch (java.text.ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

           SimpleDateFormat sdfDateTime = new SimpleDateFormat("MMMM dd, yyyy 'is' EEEE", Locale.US);
           String dateStr = sdfDateTime.format(d);

           tvDisplayDate.setText(dateStr);

       } catch (ParseException e) {
           e.printStackTrace();
       }
   }
}
IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198

2 Answers2

1

Above API 11 For min date you can use

android:minDate="mm/dd/yyyy"
or setMinDate(long time)

For Max date

android:maxDate="mm/dd/yyyy" // In XML
setMaxDate(new Date().getTime());// Current time
Zohra Khan
  • 5,182
  • 4
  • 25
  • 34
  • 1
    http://stackoverflow.com/questions/4011075/how-do-you-format-the-day-of-the-month-to-say-11th-21st-or-23rd-in-java – Zohra Khan Apr 14 '14 at 07:23
0

if you are using API level above 11 then use setMaxDate of DatePicker to set mex date. otherwise create a custom DatePicker and override onDateSet method, and apply your validation here like below

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
        int dayOfMonth) {
    Log.i(TAG, "onDateSet :which:");
    Calendar cl = Calendar.getInstance();
    cl.set(year, monthOfYear, dayOfMonth);
    if(cl.before(Calendar.getInstance())){
        this.mListener.onDateSet(view, year, monthOfYear, dayOfMonth);
    }else {
        Toast.makeText(mContext, "Please select any date before this.",    Toast.LENGTH_SHORT).show();
        return;
    }

}
maddy d
  • 1,530
  • 2
  • 12
  • 23