我使用kotlinx.Clock.now()来获取当前日期.接下来,我需要将此日期转换为LocalDateTime,以下是我的代码:
Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault())
它运行得很好.然而,我需要得到今天的一天,但今天的确切开始,即00:00:00. 能不能把时间改到00:00:00?
我使用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 还有很多.