java 一个时间范围 分组时间
时间: 2024-02-24 21:25:31 浏览: 18
你可以使用 Java 8 的 Stream API 和 DateTime API 来将时间范围分组。以下是一个示例代码:
```java
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
LocalDateTime start = LocalDateTime.of(2021, 1, 1, 0, 0);
LocalDateTime end = LocalDateTime.of(2021, 1, 10, 0, 0);
long duration = ChronoUnit.HOURS.between(start, end); // 时间范围的总小时数
int groupSize = 24; // 每组的小时数
List<LocalDateTime> range = Stream.iterate(start, d -> d.plusHours(1))
.limit(duration + 1)
.collect(Collectors.toList()); // 时间范围内每个小时的时间点
Map<Integer, List<LocalDateTime>> groups = range.stream()
.collect(Collectors.groupingBy(d -> d.getHour() / groupSize)); // 按每组的起始小时分组
groups.forEach((k, v) -> {
LocalDateTime groupStart = v.get(0);
LocalDateTime groupEnd = v.get(v.size() - 1).plusHours(1); // 每组的结束时间要加上一小时
System.out.println("Group " + k + ": " + groupStart + " - " + groupEnd);
});
}
}
```
在这个示例中,我们对一个从 2021 年 1 月 1 日 0 点到 2021 年 1 月 10 日 0 点的时间范围进行分组,每组包含 24 小时。输出结果如下:
```
Group 0: 2021-01-01T00:00 - 2021-01-02T00:00
Group 1: 2021-01-02T00:00 - 2021-01-03T00:00
Group 2: 2021-01-03T00:00 - 2021-01-04T00:00
Group 3: 2021-01-04T00:00 - 2021-01-05T00:00
Group 4: 2021-01-05T00:00 - 2021-01-06T00:00
Group 5: 2021-01-06T00:00 - 2021-01-07T00:00
Group 6: 2021-01-07T00:00 - 2021-01-08T00:00
Group 7: 2021-01-08T00:00 - 2021-01-09T00:00
Group 8: 2021-01-09T00:00 - 2021-01-10T00:00
```
在这个示例中,我们将时间范围内的每个小时的时间点存储在一个 List 中,然后使用 `Collectors.groupingBy` 方法按每组的起始小时进行分组,得到一个 Map,其中键为每组的起始小时,值为该组内的时间点列表。最后,我们遍历这个 Map,输出每个分组的起始时间和结束时间。