Material 日期范围选择器显示不正确的当前日期 Android

Material Date Range Picker showing incorrect current date Android

Material 日期范围选择器中的当前日期显示为昨天的日期。我查看了 Material Design Picker 的源代码,它似乎在获取 UTC 时区的日期时更改了日期。当前日期是日历中圈出的日期。有什么办法可以解决这个问题吗?尽管有时区,日期范围选择器应该显示正确的日期。

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

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

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

请帮忙。

已在上一版本中修复:

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

修复了导致高亮显示为今天的错误日期的问题 -> commit

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

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

已尝试 1.4.0。工作正常

我也遇到了同样的问题。我进行了一些搜索,但看起来 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);
}