java - 在Java中生成两个时间/日期之间的特定间隔

标签 java time intervals localtime

我想生成两个给定日期/时间之间的间隔。
例如,对于 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

最佳答案

您的代码的实际问题是您正在执行整数除法。我假设都是hourmin被定义为整数类型。公式(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/

相关文章:

python - 从一系列 Pandas 间隔中提取左右限制

java - 缓存的哈希码字段应该有哪些修饰符?

java - 如何从 URL 重定向到 Wildfly 上的某个端口

具有灵活回退值的 java.time DateTimeFormatter 解析

javascript - 如何将绝对时间 ("1:30 PM") 替换为相对时间 ("15 minutes ago") 并让它们自动更新?

mysql - 条件查询获取两个日期之间有间隔的数据

java - 如何将自定义脚本链接到 spring boot jar?

java - RememberMe Spring 安全 : success handler is called multiple times

php - 本地化月/日名称列表

Javascript:检查字符串是否包含字符,然后删除字符串的一部分?