向 ZonedDateTime 添加天数不会更改时间

Adding days to ZonedDateTime does not change the time

提问人:tyczj 提问时间:9/22/2023 最后编辑:tyczj 更新时间:9/25/2023 访问量:70

问:

我正在尝试获取一个实例,然后添加 1 天,然后我想知道 UTC 的磨坊时间是多少,但是当我使用时时间保持不变,我不确定为什么ZonedDateTimeplusDays

这是我正在做的

val zdt: ZonedDateTime = ZonedDateTime.now()

println("${zdt.toInstant().toEpochMilli()}")

zdt.plusDays(1)

println("${zdt.toInstant().toEpochMilli()}")

zdt.withHour(0)
zdt.withMinute(0)
zdt.withSecond(0)

println("${zdt.toInstant().toEpochMilli()}")

所有打印语句都打印出相同的值,我在这里遗漏了什么?

下面是代码示例的链接

https://pl.kotl.in/QmlXRd-HM

Java Kotlin zoneddatetime

评论

0赞 Anonymous 10/3/2023
相关新闻: 为什么 LocalDate.plusDays 在这里不起作用?

答:

9赞 Jorn 9/22/2023 #1

这些方法不会修改实例。他们返回新的。java.time 类使用不可变对象ZonedDateTime

若要修复代码,请更新变量:

var zdt: ZonedDateTime = ZonedDateTime.now()
println("${zdt.toInstant().toEpochMilli()}")
zdt = zdt.plusDays(1)
println("${zdt.toInstant().toEpochMilli()}")
zdt = zdt.withHour(0).withMinute(0).withSecond(0)
println("${zdt.toInstant().toEpochMilli()}")

评论

0赞 tyczj 9/22/2023
啊,我不知道,有道理,谢谢!
1赞 deHaar 9/22/2023 #2

为什么你明明只对纪元毫感兴趣?ZonedDateTime.now()

您可以只使用 s:Instant

fun main() {
    var now = Instant.now()
    var nowPlusOneDay = now.plus(1, ChronoUnit.DAYS)
    println("now:           ${now.toEpochMilli()}")
    println("one day later: ${nowPlusOneDay.toEpochMilli()}")
}

输出(几秒钟前):

now:           1695392676969
one day later: 1695479076969

评论

1赞 Anonymous 10/3/2023
因为一天并不总是 24 小时,假设它是。Instant
1赞 deHaar 10/4/2023
可能是一个正当的理由......