gpt4 book ai didi

scala 中的 java.util.Date 增量不一致

转载 作者:行者123 更新时间:2023-12-02 04:13:46 24 4
gpt4 key购买 nike

我尝试打印 30 个连续日期。以下是我的代码

val myDate: Long = LocalDate.parse("2017-07-01").atStartOfDay()
.toInstant(ZoneOffset.of("+0")).getEpochSecond * 1000
val sdf: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")

(0 to 29).foreach(i => println(sdf.format(new Date(myDate + 24 * 3600 * 1000 * i))))

但是输出不连续:

2017-07-01
2017-07-02
2017-07-03
2017-07-04
2017-07-05
2017-07-06
2017-07-07
2017-07-08
2017-07-09
2017-07-10
2017-07-11
2017-07-12
2017-07-13
2017-07-14
2017-07-15
2017-07-16
2017-07-17
2017-07-18
2017-07-19
2017-07-20
2017-07-21
2017-07-22
2017-07-23
2017-07-24
2017-07-25
2017-06-06 <--- !!!!!!
2017-06-07
2017-06-08
2017-06-09
2017-06-10

此行为的原因是什么以及如何解决?

最佳答案

你的数学必须在某个地方溢出(整数数学)。在开始乘法之前将项强制为 long(您可以附加 L),例如

(0 to 29).foreach(i => println(sdf.format(new Date(myDate + 24L * 3600 * 1000 * i))))

或者,使用TimeUnit.DAYS哪个可以正确处理这个问题;类似的东西

import java.util.concurrent.TimeUnit

然后

(0 to 29).foreach(i => println(sdf.format(new Date(myDate + TimeUnit.DAYS.toMillis(i)))))

但是,由于我们无论如何都使用 LocalDate;像这样写可能会更好

import java.time.{Instant, LocalDate, ZoneOffset}
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoUnit

val dtf: DateTimeFormatter = DateTimeFormatter.ISO_DATE
val ld: LocalDate = LocalDate.parse("2017-07-01")
(0 to 29).foreach(i => println(dtf.format(ld.plusDays(i))))

关于scala 中的 java.util.Date 增量不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51664392/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com