材料日期范围选择器显示不正确的当前日期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的主要内容,如果未能解决你的问题,请参考以下文章