如何在android中仅阻止DatePicker中的过去日期

时间:2014-11-11 04:10:47

标签: android datepicker

如何在android中的DatePicker中仅阻止过去的日期? 我在过去的日期和当前日期使用示例代码被阻止, 我只需要过去的日期被阻止而不是当前日期这里是我的代码

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

            public void onDateSet(DatePicker view, int yearSelected,
                                  int monthOfYear, int dayOfMonth) {
               year = yearSelected;
               month = monthOfYear;
               day = dayOfMonth;
               int n_mon = monthOfYear+1;


               business_date_et.setText(day+"-"+n_mon+"-"+year);
            }
        };


        private TimePickerDialog.OnTimeSetListener mTimeSetListener =
            new TimePickerDialog.OnTimeSetListener() {

                public void onTimeSet(TimePicker view, int hourOfDay, int min) {
                    hour = hourOfDay;
                    minute = min;

                    business_time_et.setText(hour+":"+minute);
                  }
            };


            protected Dialog onCreateDialog(int id) {
                switch (id) {
                case DATE_DIALOG_ID:

                    DatePickerDialog da = new DatePickerDialog(this, mDateSetListener,
                            mYear, mMonth, mDay);
                    Calendar c = Calendar.getInstance();

                    c.add(Calendar.DATE, 1);
                    Date newDate = c.getTime();
                    da.getDatePicker().setMinDate(newDate.getTime());
                    return da;

                case TIME_DIALOG_ID:
                    return new TimePickerDialog(this,
                            mTimeSetListener, mHour, mMinute, false);

                }
                return null;
            }

4 个答案:

答案 0 :(得分:3)

以下是示例代码:

DatePicker datePicker = (DatePicker) getView().findViewById(R.id.your_datepicker_id);   

final Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, c.getMinimum(Calendar.HOUR_OF_DAY));
c.set(Calendar.MINUTE, c.getMinimum(Calendar.MINUTE));
c.set(Calendar.SECOND, c.getMinimum(Calendar.SECOND));
c.set(Calendar.MILLISECOND, c.getMinimum(Calendar.MILLISECOND));

Time now = new Time();
now.setToNow();

datePicker.updateDate(now.year, now.month, now.monthDay);
datePicker.setMinDate(c.getTimeInMillis());

请注意,您必须将MinDate值设置为当天的最短时间,而不仅仅是当前时间后1或2秒的时间。这解决了Android中一个众所周知的Datepicker问题。

答案 1 :(得分:1)

使用setMinDate方法(最低API 11):

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

有关您主题的更多信息:

How to disable dates before today date in DatePickerDialog Android?

How to disable past dates in Android date picker?

答案 2 :(得分:1)

你也可以试试这个:

da.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000)));

它基本上按当天的当前偏移量减去当前日期。

答案 3 :(得分:0)

您可以使用以下日期获取当天后1天的日期:

c.add(Calendar.DATE, 1);

所以使用

c.add(Calendar.DATE, 1);

您将明天的日期设为最短日期。所以只需将其更改为

c.add(Calendar.DATE, 0);

它应该将今天的日期设置为datepicker中的最小日期。

希望它有所帮助。