如何在 Kotlin 中将 LocalDate 转换为 Long / Java
How to Convert LocalDate to Long in Kotlin / Java
我需要在 material 日期选择器中设置日期。它需要 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 日”
时区 phone GMT+03:00 莫斯科标准时间
UPD
比较我将 LocalDate
转换为 Long
和 MaterialDatePicker.todayInUtcMilliseconds()
的值。收到不同的值。我翻译的错误是什么?
UPD2.
评论中的好心人对由于使用不同时区而可能出现的错误是正确的。根据其中一位的建议,我尝试了:
val selectedDateToLong = selectedDate.atStartOfDay(ZoneOffset.UTC)...
而不是
val selectedDateToLong = selectedDate.atStartOfDay(ZoneId.systemDefault())...
它帮助了我
我需要在 material 日期选择器中设置日期。它需要 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 日”
时区 phone GMT+03:00 莫斯科标准时间
UPD
比较我将 LocalDate
转换为 Long
和 MaterialDatePicker.todayInUtcMilliseconds()
的值。收到不同的值。我翻译的错误是什么?
UPD2.
评论中的好心人对由于使用不同时区而可能出现的错误是正确的。根据其中一位的建议,我尝试了:
val selectedDateToLong = selectedDate.atStartOfDay(ZoneOffset.UTC)...
而不是
val selectedDateToLong = selectedDate.atStartOfDay(ZoneId.systemDefault())...
它帮助了我