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

5

在Material Date Range picker中,当前日期显示的是昨天的日期。我查看了Material Design Picker的源代码,发现它在获取UTC时区的日期时会更改日期。圆形日历中所标示的就是当前日期。有没有解决此问题的办法?无论时区如何,日期范围选择器都应该显示正确的日期。

解决此问题的一个方法是手动更改当前日期,但我尝试查找Datepicker的源代码,似乎找不到相应的方法。可以更改Material Date Range picker的当前日期吗?

我初始化日期选择器为:

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

请帮忙。


有一个 bug。请查看 https://github.com/material-components/material-components-android/issues/1360 和 https://github.com/material-components/material-components-android/issues/882。 - Gabriele Mariotti
1
他们还没有修复它,却关闭了这个问题!已经要求发布更新,感谢及时回复! - Manu Jindal
1
嗨,问题现在已经解决了,谢谢。 - Manu Jindal
不,这仍然存在! - Patriotic
@Patriotic 请参考此评论 - https://github.com/material-components/material-components-android/issues/1360#issuecomment-644790081 - Manu Jindal
问题仍未解决,我检查了资料:1.3.0。 - Vishal Patel
4个回答

1

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);
}

0

我已经更新了库到:material:1.3.0-alpha02,这对我很有帮助。


0

尝试了1.4.0版本,运行良好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接