如果前后1分钟或2分钟,如何舍入到最接近的5分钟间隔?

苏马

我想将Instant / LocalDateTime四舍五入到Java中最接近的5分钟间隔。

示例: 假设时间是: 2021-02-08T19 02:49.594预期结果: 2021-02-08T19 00:00.000

假设时间是: 2021-02-08T19 03:49.594预期结果: 2021-02-08T19 05:00.000

同样,如果时间是: 2021-02-08T19 56:49.594预期结果: 2021-02-08T19 55:00.000

同样,如果时间是: 2021-02-08T19 58:49.594预期结果: 2021-02-08T20 00:00.000

但是,如果时间是2021-02-08T19:55:00.000或2021-02-08T19:05:00.000或2021-02-08T19:00:00.000,则什么也不做。

k314159

这是一个通用解决方案(不只是5分钟):

public static Instant toNearest(Duration interval, Instant instant) {
    long intervalMillis = interval.toMillis();
    long adjustedInstantMillis = (instant.toEpochMilli() + (intervalMillis / 2)) / intervalMillis * intervalMillis;
    return Instant.ofEpochMilli(adjustedInstantMillis);
}

public static LocalDateTime toNearest(Duration interval, LocalDateTime dateTime, ZoneId zoneId) {
    ZoneRules zoneRules = zoneId.getRules();
    Instant instant = toNearest(interval, dateTime.toInstant(zoneRules.getOffset(dateTime)));
    return LocalDateTime.ofInstant(instant, zoneRules.getOffset(instant));
}

public static LocalDateTime toNearest(Duration interval, LocalDateTime dateTime) {
    return toNearest(interval, dateTime, ZoneId.systemDefault());
}

@Test
public void toNearestRoundsCorrectly() {
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021, 2, 8, 19, 0, 0)))
            .isEqualTo(LocalDateTime.of(2021, 2, 8, 19, 0, 0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021, 2, 8, 19, 2, 29, 999999999)))
            .isEqualTo(LocalDateTime.of(2021, 2, 8, 19, 0, 0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021, 2, 8, 19, 2, 30)))
            .isEqualTo(LocalDateTime.of(2021, 2, 8, 19, 5, 0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021, 2, 8, 19, 5, 0)))
            .isEqualTo(LocalDateTime.of(2021, 2, 8, 19, 5, 0));
}

@Test
public void toNearestTreatsDaylightSavingChangesCorrectly() {
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021,3,27, 23,57,30), ZoneId.of("Europe/London")))
            .isEqualTo(LocalDateTime.of(2021,3,28, 0,0,0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021,3,28, 0,57,29,999999999), ZoneId.of("Europe/London")))
            .isEqualTo(LocalDateTime.of(2021,3,28, 0,55,0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021,3,28, 0,57,30), ZoneId.of("Europe/London")))
            .isEqualTo(LocalDateTime.of(2021,3,28, 2,0,0));
    assertThat(toNearest(Duration.ofMinutes(5), LocalDateTime.of(2021,3,28, 2,5,0), ZoneId.of("Europe/London")))
            .isEqualTo(LocalDateTime.of(2021,3,28, 2,5,0));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP DateTime四舍五入到最接近的10分钟

来自分类Dev

bash到5分钟

来自分类Dev

如何在5分钟到30分钟之间汇总数据,同时保持日期间隔和其他值

来自分类Dev

MySQL / Postgres查询5分钟间隔数据

来自分类Dev

将1分钟数据汇总为5分钟平均数据

来自分类Dev

Javascript:向上舍入5分钟

来自分类Dev

Android屏幕在特定的不同时间间隔(例如1分钟,2分钟)以编程方式锁定

来自分类Dev

舍入时间跨度到15分钟间隔

来自分类Dev

熊猫:时间戳记索引四舍五入到最接近的第5分钟

来自分类Dev

舍入时间间隔最多为15分钟

来自分类Dev

Python 2-您如何向上/向下舍入到最近的6分钟?

来自分类Dev

以5分钟为间隔对DataFrame进行分组

来自分类Dev

将ionicTimePicker舍入到最近的30分钟间隔

来自分类Dev

mysql最流行的页面,间隔为5分钟

来自分类Dev

如何添加新的5分钟间隔

来自分类Dev

在Lua中将时间间隔为5分钟

来自分类Dev

如何在SQL中将5分钟的时间戳间隔转换为1分钟的间隔,同时保留其他信息?

来自分类Dev

如果前后仅5分钟,如何舍入到最接近的小时?

来自分类Dev

如果提前1,2,3,4分钟,如何将其四舍五入到最接近的5分钟间隔?

来自分类Dev

将时间舍入到最后5分钟

来自分类Dev

bash一分钟到5分钟

来自分类Dev

舍入时间跨度到15分钟间隔

来自分类Dev

常量脚本->更改src iframe(1分钟,5分钟)+ jQuery

来自分类Dev

将分钟递增至最近的15分钟间隔

来自分类Dev

将日志间隔从10分钟更改为1分钟

来自分类Dev

将TTime舍入到最接近的15分钟

来自分类Dev

将ionicTimePicker舍入到最近的30分钟间隔

来自分类Dev

GCMNetorkManager PeriodicTask只能使用1分钟,而不能使用2分钟

来自分类Dev

如何获得每5分钟的间隔记录?

Related 相关文章

  1. 1

    PHP DateTime四舍五入到最接近的10分钟

  2. 2

    bash到5分钟

  3. 3

    如何在5分钟到30分钟之间汇总数据,同时保持日期间隔和其他值

  4. 4

    MySQL / Postgres查询5分钟间隔数据

  5. 5

    将1分钟数据汇总为5分钟平均数据

  6. 6

    Javascript:向上舍入5分钟

  7. 7

    Android屏幕在特定的不同时间间隔(例如1分钟,2分钟)以编程方式锁定

  8. 8

    舍入时间跨度到15分钟间隔

  9. 9

    熊猫:时间戳记索引四舍五入到最接近的第5分钟

  10. 10

    舍入时间间隔最多为15分钟

  11. 11

    Python 2-您如何向上/向下舍入到最近的6分钟?

  12. 12

    以5分钟为间隔对DataFrame进行分组

  13. 13

    将ionicTimePicker舍入到最近的30分钟间隔

  14. 14

    mysql最流行的页面,间隔为5分钟

  15. 15

    如何添加新的5分钟间隔

  16. 16

    在Lua中将时间间隔为5分钟

  17. 17

    如何在SQL中将5分钟的时间戳间隔转换为1分钟的间隔,同时保留其他信息?

  18. 18

    如果前后仅5分钟,如何舍入到最接近的小时?

  19. 19

    如果提前1,2,3,4分钟,如何将其四舍五入到最接近的5分钟间隔?

  20. 20

    将时间舍入到最后5分钟

  21. 21

    bash一分钟到5分钟

  22. 22

    舍入时间跨度到15分钟间隔

  23. 23

    常量脚本->更改src iframe(1分钟,5分钟)+ jQuery

  24. 24

    将分钟递增至最近的15分钟间隔

  25. 25

    将日志间隔从10分钟更改为1分钟

  26. 26

    将TTime舍入到最接近的15分钟

  27. 27

    将ionicTimePicker舍入到最近的30分钟间隔

  28. 28

    GCMNetorkManager PeriodicTask只能使用1分钟,而不能使用2分钟

  29. 29

    如何获得每5分钟的间隔记录?

热门标签

归档