所以我有一堆时间戳,我想分成半小时块,所以我可以在一个表格中显示它们,这个表格显示了各自30分钟窗口内的所有对象。
我正在考虑循环遍历它们并将每个转换为字符串,并将2小时和2分钟数字与switch语句进行比较,但这似乎非常繁琐/低效且容易出错。
如何更有效地了解这一点?
答案 0 :(得分:3)
将纪元时间毫秒的整数除以1800000(以毫秒为单位30分钟)。那是你的关键;自1970年1月1日0时起,每个单位都是30分钟。
具体来说,具有UNIX_TIMESTAMP(时间段)的Mysql可以在几秒钟内得到它,所以在你的情况下除以1800。这意味着如果需要,您可以在服务器端很好地执行groupby和where子句。答案 1 :(得分:0)
{% extends "footer.html" %}
这会打印三组:
Instant[] instants = {
Instant.parse("2018-04-28T06:17:00Z"),
Instant.parse("2018-04-28T07:56:00Z"),
Instant.parse("2018-04-28T07:33:00Z"),
Instant.parse("2018-04-28T07:13:00Z"),
Instant.parse("2018-04-28T06:25:00Z"),
Instant.parse("2018-04-28T06:13:00Z")
};
final long blockSizeSeconds = TimeUnit.MINUTES.toSeconds(30);
Map<Long, List<Instant>> grouped = Arrays.stream(instants)
.collect(Collectors.groupingBy(i -> i.getEpochSecond() / blockSizeSeconds));
grouped.values().forEach(System.out::println);