如何在 kotlin 中比较 LocalDateTime 实例

问题描述 投票:0回答:4

所以我在 kotlin 方面遇到了一些问题

LocalDateTime

val now = CurrentDateTime
val someDate = someService.someLocalDateTime

如您所见,我有两个日期,我想知道

now
是否大于
someDate
。 我还需要知道它是否更大,大了多少。

我可以通过检查

year
month
day
minute
second
来做到这一点,如下所示:

if (now.year().toString() == someDate.year.toString())

但这不是一个好方法

欢迎任何建议。

kotlin
4个回答
2
投票

将 Kotlin
LocalDateTime
转换为 Java
LocalDateTime

要将 Kotlin

LocalDateTime
转换为 Java
LocalDateTime
,您可以使用 这个函数:

fun LocalDateTime.toJavaLocalDateTime(): LocalDateTime

将此 kotlinx.datetime.LocalDateTime 值转换为 java.time.LocalDateTime 值。

然后您可以选择使用以下方法或其他建议的方法来比较转换后的

java.time.LocalDateTime

比较 Java
LocalDateTime

要比较

LocalDateTime
,您可以使用
LocalDateTime
isAfter()
isBefore()
isEqual()

import java.time.LocalDateTime

fun main() {
    val currentTime = LocalDateTime.now()
    val ytdTime = LocalDateTime.now().minusDays(1)
    println(currentTime.isAfter(ytdTime))
    println(currentTime.isBefore(ytdTime))
    println(currentTime.isEqual(ytdTime))
}

输出

true
false
false

要查找

LocalDateTime
之间的差异,您可以使用
ChronoUnit
:

import java.time.temporal.ChronoUnit

fun main() {
    val currentTime = LocalDateTime.now()
    val ytdTime = LocalDateTime.now().minusDays(1)
    val secondDifference = ChronoUnit.SECONDS.between(ytdTime, currentTime)
    val minutesDifference = ChronoUnit.MINUTES.between(ytdTime, currentTime)
    val hourDifference = ChronoUnit.HOURS.between(ytdTime, currentTime)
    println(secondDifference)
    println(minutesDifference)
    println(hourDifference)
}

输出

86399
1439
23

2
投票

您可以简单地以秒为单位转换日期并且:

  • 比较一下就知道哪个更大
  • 减去它们就知道一个比另一个大多少

一个例子是

val now = CurrentDateTime.toEpochSeconds()
val someDate = someService.someLocalDateTime.toEpochSeconds();

if(now > someDate) 
//someDate is in the past
else
//someDate is in the future or both dates are equal

val distance = now-someDate

希望这有帮助


2
投票

比较两个 Date 对象的标准解决方案是使用compareTo() 函数。它返回一个值

= 0, if both dates are equal.
< 0, if date is before the specified date.
> 0, if date is after the specified date.

以下程序演示了它:

import java.text.SimpleDateFormat
import java.util.*

 
fun main() {

    val now = CurrentDateTime  // "01/21/2023" 
    val someDate = someService.someLocalDateTime // "01/21/2020"
 
    val sdf = SimpleDateFormat("MM/dd/yyyy")
 
    val firstDate: Date = sdf.parse(now)
    val secondDate: Date = sdf.parse(someDate)
 
    val cmp = firstDate.compareTo(secondDate)
    when {
        cmp > 0 -> {
            System.out.printf("%s is after %s", d1, d2)
        }
        cmp < 0 -> {
            System.out.printf("%s is before %s", d1, d2)
        }
        else -> {
            print("Both dates are equal")
        }
    }
}

0
投票

如果您使用 kotlinx-datetime,我认为您可以像对数字或字符串一样比较它们:

// Check if startDate is before endDate.

val datesAreValid = startDate < endDate

我不确定它是使用 LocalDate 对象还是打印的字符串来比较某些内容。 我看到的是它作为字符串打印

"2024-02-09"

如果 String 上的

<
>
=
逐个比较,我们可以假设
"2024-02-09"
小于
"2024-03-09"

这是

Years / Month / day
顺序和
****-**-**
良好的格式,就像他会一直坚持2个案例一样。

© www.soinside.com 2019 - 2024. All rights reserved.