【问题标题】:Material Date Range Picker showing incorrect current date Android材料日期范围选择器显示不正确的当前日期Android
【发布时间】:2020-10-03 12:00:33
【问题描述】:

材料日期范围选择器中的当前日期显示为昨天的日期。我查看了 Material Design Picker 的源代码,它似乎在获取 UTC 时区的日期时更改了日期。当前日期是日历中圈出的日期。有没有办法解决这个问题?无论时区如何,日期范围选择器都应显示正确的日期。

该问题的一个解决方案是手动更改当前日期,我尝试查看 Datepicker 的源代码,但似乎没有找到解决此问题的方法。材料日期范围选择器的当前日期可以更改吗?

我将日期选择器初始化为:

MaterialDatePicker.Builder builder = MaterialDatePicker.Builder.dateRangePicker();
final MaterialDatePicker materialDatePicker = builder.build();
materialDatePicker.show(fragmentManager, materialDatePicker.toString());

请帮忙。

【问题讨论】:

标签: android datepicker material-design


【解决方案1】:

上一版本已修复:

https://github.com/material-components/material-components-android/releases/tag/1.2.0-rc01

修复了导致今天突出显示错误日期的问题 -> commit

【讨论】:

    【解决方案2】:

    上述问题已解决。请参考这个comment

    【讨论】:

    • 问题未解决我检查了材料:1.3.0
    【解决方案3】:

    我已将库更新为:material:1.3.0-alpha02,它帮助了我。

    【讨论】:

      【解决方案4】:

      试过 1.4.0。它工作正常

      【讨论】:

        【解决方案5】:

        我也面临同样的问题。我进行了一些搜索,但看起来material 库中存在问题。 我喜欢一些代码并解决了这个问题:

                CalendarConstraints.Builder calendarConstraintBuilder = new CalendarConstraints.Builder();
                calendarConstraintBuilder.setValidator(DateValidatorPointBackward.now());
        
                dateBuilder = MaterialDatePicker.Builder.dateRangePicker();
                dateBuilder.setTitleText("Select Date Range");
                dateBuilder.setCalendarConstraints(calendarConstraintBuilder.build());
                MaterialDatePicker<Pair<Long, Long>> picker = dateBuilder.build();
                picker.setMenuVisibility(false);
                picker.setAllowEnterTransitionOverlap(false);
                picker.show(getActivity().getSupportFragmentManager(), picker.toString());
        
                picker.addOnPositiveButtonClickListener(selection -> {
        
                    Calendar utc = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
                    utc.setTimeInMillis(selection.first);
                    String startDate = calendarToDate(getActivity(), utc, "dd-MMM-yyyy");
                    utc.setTimeInMillis(selection.second);
                    String endDate = calendarToDate(getActivity(), utc, "dd-MMM-yyyy");
        
                    date.setText(startDate+" to "+endDate);
        
                });
        

        这里是calendarToDate 方法:

        public String calendarToDate(Context context, Calendar calendar, String dateFormat) {
            if (calendar == null) {
                return null;
            }
        
            Locale locale = context.getResources().getConfiguration().locale;
            DateFormat df = new SimpleDateFormat(dateFormat, locale);
            TimeZone timeZone = TimeZone.getTimeZone("UTC");
            df.setTimeZone(timeZone);
        
            Date d = calendar.getTime();
            return df.format(d);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-07-20
          • 1970-01-01
          • 1970-01-01
          • 2020-05-09
          • 1970-01-01
          • 2020-10-25
          • 1970-01-01
          相关资源
          最近更新 更多