提问人:tyczj 提问时间:9/22/2023 最后编辑:tyczj 更新时间:9/25/2023 访问量:70
向 ZonedDateTime 添加天数不会更改时间
Adding days to ZonedDateTime does not change the time
问:
我正在尝试获取一个实例,然后添加 1 天,然后我想知道 UTC 的磨坊时间是多少,但是当我使用时时间保持不变,我不确定为什么ZonedDateTime
plusDays
这是我正在做的
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()}")
所有打印语句都打印出相同的值,我在这里遗漏了什么?
下面是代码示例的链接
答:
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
可能是一个正当的理由......
评论