日期选择器-更改所选日期的Android

时间:2019-02-12 13:40:00

标签: android android-studio datepicker android-datepicker datepickerdialog

我使用日期选择器并将最大日期设置为2020年2月11日,而今天的日期是2019年2月12日。

在单击日期选择器顶部的“年份”直接更改年份时遇到问题。 当日期选择器在当前日期(今天的日期:2019年2月12日)初始化时,如果我将年份更改为2020年2月,则日期选择器将显示2020年2月12日作为标题,但在日历视图中选择的日期是2月11日。 >

请参见下图:

img 1:日期选择器初始化为今天的日期

enter image description here

img 2:不更改日期,更改年份

enter image description here

img 3:所选标题为2020年2月12日。但由于最大日期是2020年2月11日,因此在日历上选择了11日。 另外,单击“确定”,即可获得2020年2月12日。

enter image description here

  

我要删除此选择,或者只是将最大日期设为选择的日期   年份更改。

1 个答案:

答案 0 :(得分:0)

几经周折,几经谷歌搜索,终于找到了上述解决方案:

        datePicker.init(currentCalendar.get(Calendar.YEAR),
        currentCalendar.get(Calendar.MONTH),
        currentCalendar.get(Calendar.DAY_OF_MONTH),
        new DatePicker.OnDateChangedListener() {
          @Override
          public void onDateChanged(DatePicker view, int selYear, int selMonth,
              int selDay) {
            String dateSelectionType =
                getDateSelectionType(minDate.getTimeInMillis(),
                    maxDate.getTimeInMillis(), selYear, selMonth, selDay);
            if (dateSelectionType.equals("IS_BETWEEN_RANGE")) {
              return;
            }
            if (dateSelectionType.equals("IS_LESS_THAN_MIN")) {
              datePicker.updateDate(minDate.get(Calendar.YEAR), minDate.get(Calendar.MONTH),
                  minDate.get(Calendar.DAY_OF_MONTH));

              return;
            }
            if (dateSelectionType.equals("IS_MORE_THAN_MAX")) {
              datePicker.updateDate(maxDate.get(Calendar.YEAR),
                  maxDate.get(Calendar.MONTH), maxDate.get(Calendar.DAY_OF_MONTH));
              return;
            }
          }
        });

添加另一种方法来知道所选日期是在最大日期之后还是在最小日期之前::

public static String getDateSelectionType(long minDate, long maxDate,
          int selectedYear, int selectedMonth, int selectedDayOfMonth) {


Calendar minDateCalendar = Calendar.getInstance();
    minDateCalendar.setTimeInMillis(minDate);
    minDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    minDateCalendar.set(Calendar.MINUTE, 0);
    minDateCalendar.set(Calendar.SECOND, 0);
    minDateCalendar.set(Calendar.MILLISECOND, 0);

    Calendar maxDateCalendar = Calendar.getInstance();
    maxDateCalendar.setTimeInMillis(maxDate);
    maxDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    maxDateCalendar.set(Calendar.MINUTE, 0);
    maxDateCalendar.set(Calendar.SECOND, 0);
    maxDateCalendar.set(Calendar.MILLISECOND, 0);

    Calendar selectedDateCalendar = Calendar.getInstance();
    selectedDateCalendar.set(Calendar.YEAR, selectedYear);
    selectedDateCalendar.set(Calendar.MONTH, selectedMonth);
    selectedDateCalendar.set(Calendar.DAY_OF_MONTH, selectedDayOfMonth);
    selectedDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    selectedDateCalendar.set(Calendar.MINUTE, 0);
    selectedDateCalendar.set(Calendar.SECOND, 0);
    selectedDateCalendar.set(Calendar.MILLISECOND, 0);

    if (selectedDateCalendar.getTime().before(minDateCalendar.getTime()))
      return "IS_LESS_THAN_MIN";

    if (selectedDateCalendar.getTime().after(maxDateCalendar.getTime()))
      return "IS_MORE_THAN_MAX";

    return "IS_BETWEEN_RANGE";
  }

PS: 将解决方案添加到我自己的问题中只是解决任何人遇到相同问题的出路。