我想生成两个给定日期/时间之间的间隔。
例如,对于 24 小时格式 (HH:MM)
,我有两个端点 00:00 和 11:51,假设我想将其划分为 24 个部分。所以我的计算是这样的:
(hour * 3600 + min * 60) / 24
如果我使用calendar.add(Calendar.SECOND, (hour * 3600 + min * 60)/24)
,我会得到错误的日期/时间。我的计算是 double 的,我认为calendar.add()
不支持 double 。就像将 28.883 当作 29 一样。
本质上我想要这样的东西:
now : 15:57
today start : 00:00 (24hh)
output : 00:00, 00:47.85, …, 15:57
最佳答案
您的代码的实际问题是您正在执行整数除法。我假设都是hour
和min
被定义为整数类型。公式(hour * 3600 + min * 60) / 24
总是产生一个整数类型。如果将代码更改为 (hour * 3600 + min * 60) / 24d
该表达式至少产生一个浮点值。
下一个问题确实是Calendar.add(int field, int amount)
仅接受整数作为第二个参数。当然,如果你通过Calendar.SECOND
作为第一个参数,那么你的精度不高于秒。您可以使用Calendar.MILLISECOND
以获得更高的精度。
但是,我建议使用新的 Java 日期和时间 API,而不是 troublesome旧 API:
LocalTime startTime = LocalTime.of(0, 0);
LocalTime endTime = LocalTime.of(11, 51);
long span = Duration.between(startTime, endTime).toNanos();
final int n = 23; // Number of pieces
LongStream.rangeClosed(0, n)
.map(i -> i * span / n)
.mapToObj(i -> startTime.plusNanos(i))
.forEach(System.out::println);
关于java - 在Java中生成两个时间/日期之间的特定间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55373233/