繁体   English   中英

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

[英]Date Picker - Change Selected Date Android

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

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

参见下图:

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

在此处输入图片说明

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

在此处输入图片说明

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

在此处输入图片说明

我想删除此选择,或者如果 年份更改, 则仅将最大日期设为所选日期

经过几番尝试和尝试,以及几次Google搜索,终于找到了上述解决方案:

        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: 如果有人遇到相同的问题,将解决方案添加到我自己的问题中就是一个出路。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM