繁体   English   中英

如何在 Kotlin / Java 中将 LocalDate 转换为 Long

[英]How to Convert LocalDate to Long in Kotlin / Java

我需要在材料日期选择器中设置日期。 它需要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转换为LongMaterialDatePicker.todayInUtcMilliseconds()的值。 收到不同的值。 我的翻译有什么错误?

UPD2。

评论中的好心人对由于使用不同的时区而可能出现的错误是正确的。 根据其中一位的建议,我尝试了:

val selectedDateToLong = selectedDate.atStartOfDay(ZoneOffset.UTC)...

代替

val selectedDateToLong = selectedDate.atStartOfDay(ZoneId.systemDefault())...

它帮助了我

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM