我使用kotlinx.Clock.now()来获取当前日期.接下来,我需要将此日期转换为LocalDateTime,以下是我的代码:

Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())

它运行得很好.然而,我需要得到今天的一天,但今天的确切开始,即00:00:00. 能不能把时间改到00:00:00?

推荐答案

首先,把今天的日期算成LocalDate分.

你可以做很长时间的事情:

val now = Clock.System.now()
val tz = TimeZone.currentSystemDefault()
val today = now.toLocalDateTime(tz).date

或者,您可以简化使用Clock.todayIn:

val tz = TimeZone.currentSystemDefault()
val today = Clock.todayIn(tz)

使用上面的任一项,您现在都可以使用LocalDate.atStartOfDayIn获得一天中的开始Instant.

val startInstant = today.atStartOfDayIn(tz)

从那里开始,如果你需要LocalDateTime分,你也可以得到:

val start = startInstant.toLocalDateTime(tz)

把所有这些放在一起:

val tz = TimeZone.currentSystemDefault()
val start = Clock.todayIn(tz).atStartOfDayIn(tz).toLocalDateTime(tz)

我推荐atStartOfDayIn,因为它会正确地返回一天的起点--不一定是00:00.

例如,2023年3月12日在古巴(TZ:America/Havana),这一天从01:00开始,因为这是夏令时的第一天,在那个特定的时区,转换发生在00:00.(换句话说,当地时间从那一天的23:59点到01:00点.)类似的 case 还有很多.

Kotlin相关问答推荐

用普通Kotlin理解Gradle的Kotlin DSL'""

用A*搜索算法解决特修斯和米诺陶尔难题

Kotlin扩展函数未调用Hibernate/JPA中的重写函数

如何在不基于数据 map 的情况下将图例添加到lets plot kotlin

kotlin短路列表判断吗?

如何从 var list 或可变列表中获取列表流

如何在 Kotlin 中声明一个空数组而不期望 null?

使用 LazyListScope 嵌套可组合项

为什么 Kotlin 扩展运算符在传递原始可变参数时需要 toTypedArray()?

Spring webflux bean验证不起作用

基类中的 ViewModelProviders.get(...)

Kotlin:泛型、反射以及类型 T 和 T:Any 之间的区别

找不到 androidsdk.modules

Kotlin的web-framework框架

RecyclerView SnapHelper无法显示第一个/最后一个元素

Kotlin协程处理错误和实现

应用程序在使用 Google Play 服务时遇到问题

Kotlin out-projected 类型禁止使用

Kotlin,什么时候按map授权?

Dagger 2 androidx fragment不兼容类型