将时间戳排序为半小时块

时间:2018-04-28 00:25:24

标签: java mysql jsp datetime timestamp

所以我有一堆时间戳,我想分成半小时块,所以我可以在一个表格中显示它们,这个表格显示了各自30分钟窗口内的所有对象。

我正在考虑循环遍历它们并将每个转换为字符串,并将2小时和2分钟数字与switch语句进行比较,但这似乎非常繁琐/低效且容易出错。

如何更有效地了解这一点?

2 个答案:

答案 0 :(得分:3)

将纪元时间毫秒的整数除以1800000(以毫秒为单位30分钟)。那是你的关键;自1970年1月1日0时起,每个单位都是30分钟。

具体来说,具有UNIX_TIMESTAMP(时间段)的Mysql可以在几秒钟内得到它,所以在你的情况下除以1800。这意味着如果需要,您可以在服务器端很好地执行groupby和where子句。

答案 1 :(得分:0)

拼写user2023577’s suggestion

{% 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);