【问题标题】:Set MinDate and MaxDate in DatePIcker在 DatePIcker 中设置 MinDate 和 MaxDate
【发布时间】:2017-04-07 04:18:14
【问题描述】:

创建我正在显示 DatePicker 的应用程序。现在我想设置 DatePicker 的 MinDate 是前两年,最大日期是未来两年。选择应该基于当前日期。假设当前日期是 23/11/2016 所以datepicker 应在 DatePicker 中显示截至 23/11/2014 的日期,所有日期应在 23/11/2014 之前禁用。当我们单击 Datepicker 时,光标应位于当前日期。创建 DtaePicker

private void showDateDailog() {

    final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {

            year = selectedYear;
            month = selectedMonth;
            day = selectedDate;

          ((TextView) findViewById(R.id.textViewTORStartDate)).setText(new StringBuilder().append(day).append("/")
                        .append(month + 1).append("/").append(year));

        }
    }, year, month, day);
    datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis());
    datePickerDialog.show();
}

【问题讨论】:

    标签: android android-datepicker


    【解决方案1】:

    使用以下代码设置最少两年前和最多两年后的日期:

    Calendar c = Calendar.getInstance();
    c.add(Calendar.YEAR, -2); // subtract 2 years from now
    datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis());
    c.add(Calendar.YEAR, 4); // add 4 years to min date to have 2 years after now
    datePickerDialog.getDatePicker().setMaxDate(c.getTimeInMillis());
    

    【讨论】:

      【解决方案2】:

      我相信这段代码确实可以帮助您解决问题。

      这是您的修复代码 -

      private void showDateDailog() {
      
      final DatePickerDialog datePickerDialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() {
      
          @Override
          public void onDateSet(DatePicker datePicker, int selectedYear, int selectedMonth, int selectedDate) {
      
              year = selectedYear;
              month = selectedMonth;
              day = selectedDate;
      
            ((TextView) findViewById(R.id.textViewTORStartDate)).setText(new StringBuilder().append(day).append("/")
                          .append(month + 1).append("/").append(year));
      
          }
      }, year, month, day);
      
      final Calendar calendar = Calendar.getInstance();
      Calendar cal = Calendar.getInstance();
      int yy = calendar.get(Calendar.YEAR);
      int mm = calendar.get(Calendar.MONTH);
      int dd = calendar.get(Calendar.DAY_OF_MONTH);
      //Min date setting part
      cal.set(Calendar.MONTH, mm);
      cal.set(Calendar.DAY_OF_MONTH, dd);
      cal.set(Calendar.YEAR, yy - 2);
      datePickerDialog.setMinDate(cal.getTimeInMillis());
      //Maximum date setting part
      Calendar calen = Calendar.getInstance();
      calen.set(Calendar.MONTH, mm);
      calen.set(Calendar.DAY_OF_MONTH, dd);
      calen.set(Calendar.YEAR, yy + 2);
      datePickerDialog.setMaxDate(calen.getTimeInMillis());
      datePickerDialog.show();
      }
      

      【讨论】:

        【解决方案3】:

        您可以设置 MinDate 和 MaxDate,您需要使用 DatePicker 类。

        class MDatePickerDialog extends DatePickerDialog {
            MDatePickerDialog(Context c) {
                super(c, null, 2016, 11, 23);
                Date min = new Date(2018-1900, 4, 21);
                DatePicker p = getDatePicker();
                CalendarView cv = p.getCalendarView();
                long cur = cv.getDate();
                int d = cv.getFirstDayOfWeek();
                p.setMinDate(min.getTime());
                cv.setDate(cur + 1000L*60*60*24*40);
                cv.setFirstDayOfWeek((d + 1) % 7);
                cv.setDate(cur);
                cv.setFirstDayOfWeek(d);
            }
        }
        

        希望这会对你有所帮助。

        【讨论】:

          【解决方案4】:

          您可以从 DatePickerDialog 获取底层 DatePicker(只需调用 getDatePicker())并使用以下方法设置其边界:

          setMinDate(long minDate)
          setMaxDate(long maxDate)
          

          其中参数是自默认时区 1970 年 1 月 1 日 00:00:00 以来的通常毫秒数。当然,您仍然需要计算这些值,但这对于 Calendar 类应该是微不足道的:只需传递当前日期并从中添加或减去 x 年..

          【讨论】:

          • 1970 年 1 月 1 日 00:00:00 之前的日期呢?
          猜你喜欢
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2018-02-19
          • 1970-01-01
          • 2014-07-03
          • 1970-01-01
          • 2017-05-24
          • 2023-04-10
          相关资源
          最近更新 更多