2014-01-07 3 views
34

Как отключить будущие даты в подборщике Android ДатыКак отключить будущие даты в выбора даты Android

Java Кода:

mExpireDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // To show current date in the datepicker 
       final Calendar mcurrentDate = Calendar.getInstance(); 
       int mYear = mcurrentDate.get(Calendar.YEAR); 
       int mMonth = mcurrentDate.get(Calendar.MONTH); 
       int mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH); 

       DatePickerDialog mDatePicker = new DatePickerDialog(
         EventRegisterActivity.this, new OnDateSetListener() { 
          public void onDateSet(DatePicker datepicker, 
            int selectedyear, int selectedmonth, 
            int selectedday) { 

           mcurrentDate.set(Calendar.YEAR, selectedyear); 
           mcurrentDate.set(Calendar.MONTH, selectedmonth); 
           mcurrentDate.set(Calendar.DAY_OF_MONTH, 
             selectedday); 
           SimpleDateFormat sdf = new SimpleDateFormat(
             getResources().getString(
               R.string.date_card_formate), 
             Locale.US); 

           mExpireDate.setText(sdf.format(mcurrentDate 
             .getTime())); 
          } 
         }, mYear, mMonth, mDay); 

       mDatePicker.setTitle(getResources().getString(
         R.string.alert_date_select)); 
       mDatePicker.show(); 
      } 
     }); 

плз помощь, как это сделать?

ответ

93

Получите DatePicker от DatePickerDialog с getDatePicker(). Установите максимальную дату на текущую дату с setMaxDate():.

mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); 

Требуемый уровень API 11.

+0

где добавить эти строки ondatesetListner ?? –

+0

@SaadBilal, добавьте эти строки в 'onCreateDialog (int id) {...}' после вашего идентификатора диалогового окна. – Dadani

+0

@Dadani благодарит за помощь –

4

Если пользователь выбирает будущую дату обновит DatePicker к текущей дате (сегодня)

вы можете использовать следующий код для проверки выбран будушее или не

final Calendar cal = Calendar.getInstance(); 
datePickerDob.init(currentYear, currentMonth, currentDay, 
      new OnDateChangedListener() { 

       @Override 
       public void onDateChanged(DatePicker view, int year, 
         int monthOfYear, int dayOfMonth) { 
        Calendar selectedCal = Calendar.getInstance(); 
        selectedCal.set(year, monthOfYear, dayOfMonth); 

        long selectedMilli = selectedCal.getTimeInMillis(); 

        Date datePickerDate = new Date(selectedMilli); 
        if (datePickerDate.after(new Date())) { 

         datePickerDob.updateDate(cal.get(Calendar.YEAR), 
           cal.get(Calendar.MONTH), 
           cal.get(Calendar.DAY_OF_MONTH)); 

        } else { 


        } 

       } 
      }); 

Вы также можете использовать СотрагеТо (метод)

datePickerDate.compareTo(new Date()); 

Сравните приемник с указанной датой, чтобы определить относительный порядок.

Параметры Дата съемки Дата, чтобы сравнить с.

Возвращает a int < 0, если эта дата меньше указанной даты, 0, если они равны, и int> 0, если эта дата больше.

12

Вы можете вызвать getDatePicker() setMaxDate (длинный) на вашем DatePickerDialog установить сегодня в качестве максимальной даты. Вы можете обновить функцию с тем же именем из опубликованного фрагмента.

Примечание: DatePickerDialog - это объект, на который я ссылался в Документах Android по ссылке, которую я разместил.

@Override 
protected Dialog onCreateDialog(int id) { 
    Calendar c = Calendar.getInstance(); 
    int cyear = c.get(Calendar.YEAR); 
    int cmonth = c.get(Calendar.MONTH); 
    int cday = c.get(Calendar.DAY_OF_MONTH); 
    switch (id) { 
     case DATE_DIALOG_ID: 
     //start changes... 
     DatePickerDialog dialog = new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday); 
     dialog.getDatePicker().setMaxDate(System.currentTimeMillis()); 
     return dialog; 
     //end changes... 
    } 
    return null; 
} 

Попробуйте это и ответьте!

+3

+1 для этого. Вместо '.setMaxDate (new Date())' лучше использовать '.setMaxDate (System.currentTimeMillis())', поскольку ожидаемый аргумент является 'long'. В противном случае ваш подход здесь широк и прост. – Dadani

+1

В версии 5.0 есть ошибка. setMaxDate() будет выделен серым цветом, но все же он может быть выбран. –

+0

@ KetanAhir Я также сталкиваюсь с той же проблемой. Могли ли вы это разрешить? –

0
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    DatePickerDialog dialog = new DatePickerDialog(getActivity(), ondateSet, year, month, day); 
    Calendar c = Calendar.getInstance(); 
    c.add(Calendar.DATE, 1); 
    Date newDate = c.getTime(); 
    dialog.getDatePicker().setMaxDate(newDate.getTime() - (newDate.getTime() % (24 * 60 * 60 * 1000))); 
    return dialog; 
} 
0
**new Way** 

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(); 
      } 
     }); 
+0

mDatePicker.getDatePicker(). SetMaxDate (System.currentTimeMillis()); –

+0

mDatePicker.getDatePicker(). SetMinDate (System.currentTimeMillis()); –