所以我在 kotlin 方面遇到了一些问题
LocalDateTime
val now = CurrentDateTime
val someDate = someService.someLocalDateTime
如您所见,我有两个日期,我想知道
now
是否大于 someDate
。
我还需要知道它是否更大,大了多少。
我可以通过检查
year
、month
、day
、minute
和 second
来做到这一点,如下所示:
if (now.year().toString() == someDate.year.toString())
但这不是一个好方法
欢迎任何建议。
LocalDateTime
转换为 Java LocalDateTime
要将 Kotlin
LocalDateTime
转换为 Java LocalDateTime
,您可以使用 这个函数:
fun LocalDateTime.toJavaLocalDateTime(): LocalDateTime
将此 kotlinx.datetime.LocalDateTime 值转换为 java.time.LocalDateTime 值。
然后您可以选择使用以下方法或其他建议的方法来比较转换后的
java.time.LocalDateTime
。
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
您可以简单地以秒为单位转换日期并且:
一个例子是
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
希望这有帮助
比较两个 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")
}
}
}
如果您使用 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个案例一样。