我有两个kotlinx.datetime.LocalDateTime的例子:

val startDate =
LocalDateTime(year = 2020, month = Month.MARCH, dayOfMonth = 25, hour = 10, minute = 
36, second = 12)
val endDate =
LocalDateTime(year = 2023, month = Month.FEBRUARY, dayOfMonth = 28, hour = 0, minute 
= 0, second = 1)

我想计算这两个日期之间的差异,但我不想使用Java Way. 我怎样才能做到这一点呢? 顺便说一句,我正在做微优化,所以我不能把它们转换成Instant来使用Instant.until().

推荐答案

Non-Java

我还不认识柯特林,但我能读the documentation字.

LocalDateTime类表示带有日期时间的日期,但缺少时区或UTC偏移量的上下文.所以这个类不能代表时间线上的某个时刻.

相比之下,Instant级确实代表了一个时刻,一个时间轴上的时间点.此类表示的日期具有与UTC零小时-分-秒的偏移量.

您可以获得DateTimePeriod类中两个Instant对象之间经过的时间量.LocalDateTime班没有这样的班级.

因此,我们应该能够分配零偏移量,将LocalDateDate个对象转换为Instant个对象.我不知道该怎么做,因为我不使用Kotlin.但我想你可以通过在所有三个参数中都传递零来得到UtcOffset,然后将它应用于LocalDateTime,从而得到Instant.

在你的问题中,你不愿意走这条路,因为你说的是"微观优化".我不知道你在说什么.但我会 Select 那条路.否则,您将需要编写自己的实现来计算运行时间.

Java

kotlinx-datetime是一个模仿与JavaBundle 在一起的java.time框架的库,但只包含有限的功能子集.该库用于Kotlin应用程序,这些应用程序将被部署到JVM上.

在您的例子中,您需要的是java.time个类中的Duration个类.

如果您的应用程序将部署到JVM,请使用java.time:Duration.between( startLdt , endLdt ).

Duration d = 
    Duration.between( 
        LocalDateTime.of ( 2020, Month.MARCH, 25, 10, 36, 12 ) ,
        LocalDateTime.of ( 2023, Month.FEBRUARY, 28, 0, 0, 1 )
    ) ;

Kotlin相关问答推荐

Android Jetpack编写androidx.compose.oundation.lazy.grid.Items

解决Microronaut中多个可能的Bean候选者冲突

Kotlin异步不并行运行任务

Kotlin Poet 的导入不明确

始终抛出的函数 - 具有块主体的函数中需要的返回表达式

Kotlin - 如何避免在密封类的 when() 语句中转换第二个变量

Kotlin:调用 CoroutineScope.launch 与在协程内启动之间的区别

Kotlin spring boot @RequestBody 验证未触发

如何从 kotlin 中的数据类访问 val?

Kotlin 有垃圾收集器吗?如果是这样,它基于哪种算法?

kotlin 扩展属性的惰性初始化器中的这个引用

DatabaseManager_Impl 不是抽象的,不会覆盖 RoomDatabase 中的抽象方法 clearAllTables()

如何使用Kotlin Dokka记录主构造函数参数

如何捕获传递给模拟函数的参数并返回它?

用Gradle Kotlin DSL构建源jar?

@StringRes、@DrawableRes、@LayoutRes等android注释使用kotlin参数进行判断

Kotlin 中内部可见性修饰符的范围

使用 Moshi/Retrofit2 访问深度嵌套的 JSON 数组

Kotlin 中的填充字符串

如何在 kotlin 中创建重复对象数组?