【发布时间】:2022-01-07 01:30:15
【问题描述】:
我需要在材料日期选择器中设置日期。它需要Long 来设置日期。我试着这样做:
val formatter = DateTimeFormatter.ofPattern(DAY_FORMAT_PATTERN)
val selectedDate = LocalDate.parse(viewModel.selectedDateStateFlow.value, formatter)
val selectedDateToLong = selectedDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli()
val datePicker = MaterialDatePicker.Builder.datePicker()
.setTheme(R.style.DatePicker)
.setSelection(selectedDateToLong)
.build()
在这种情况下,日期选择器将日期设置为少一天。 有更准确的转换选项吗?
例如:
I/System.out: viewModel.selectedDateStateFlow.value = 30 Nov, 2021
I/System.out: selectedDate = 2021-11-30
I/System.out: selectedDateToLong = 1638219600000
I/System.out: MaterialDatePicker.todayInUtcMilliseconds() = 1638230400000
但日期选择器设置为“2021 年 11 月 29 日”
手机上的时区 GMT+03:00 莫斯科标准时间
UPD
比较了我将LocalDate 转换为Long 和MaterialDatePicker.todayInUtcMilliseconds() 的值。收到不同的值。我的翻译有什么错误?
【问题讨论】:
-
我对 Android API 了解不多,但我本以为它会起作用...你能告诉我你的系统时区是什么吗?是UTC+X吗?
-
你能提供一个具体的例子吗?我假设在解析
viewModel.selectedDateStateFlow.value和重新格式化数据选择器中的数据之间存在时区差异。如果示例包含viewModel.selectedDateStateFlow.value、selectedDate、selectedDateToLong的值以及日期选择器显示的内容,那就太好了。 -
会不会是
viewModel.selectedDateStateFlow.value已经比您预期的“少了一天”?你检查过它的价值吗? -
当我打印
selectedDate的值时 - 我得到正确的日期。默认为当前日期。手机上的时区 GMT+03:00 莫斯科标准时间 -
尝试打印
MaterialDatePicker.todayInUtcMilliseconds()。这与selectedDateToLong的值相同吗?如果不是,数值上的区别是什么?另外,不妨试试ZoneOffset.UTC而不是ZoneId.systemDefault():-)
标签: java kotlin material-design