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

Posted

技术标签:

【中文标题】材料日期范围选择器显示不正确的当前日期Android【英文标题】:Material Date Range Picker showing incorrect current date 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());

请帮忙。

【问题讨论】:

有一个错误。检查github.com/material-components/material-components-android/… 和github.com/material-components/material-components-android/… 他们还没有修复它,并且已经关闭了这个问题!已要求发布更新,感谢及时回复! 您好,问题已解决,谢谢 不,这仍然存在! @Patriotic 请参考此评论 - github.com/material-components/material-components-android/… 【参考方案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);

【讨论】:

以上是关于材料日期范围选择器显示不正确的当前日期Android的主要内容,如果未能解决你的问题,请参考以下文章

角度材料日期时间选择器更改显示日期时间的格式

日期范围选择器 - 日历标题本地化格式

如何从角度材料日期选择器获取当前时间?

jQuery 日期选择器。 2个日期选择器。限制范围。默认日期 当前日期

引导日期选择器未在 editorFor 中显示模型值

角度材料日期选择器最小和最大日期验证消息