有序时间"小时结束"转换为日期时间值

时间:2014-12-05 23:17:51

标签: java sql datetime jodatime java-time

有些企业通过“小时结束”及时跟踪事件。一天中的每个小时由序数表示:

  • 1 ... 24 for UTC
  • 1 ... 23,1 ... 24和1 ... 25适用于具有一小时夏令时(DST)调整的时区。

因此,从午夜到01:00的第一个小时是Hour Ending 01

对我而言,追踪时间似乎是一种愚蠢的方式。更明智的是半开放式方法[)使用时间,其中开头是包容性的,结束是排他性的。所以:

  • 2014-12-05T01:00:00.000会标记Hour Ending 01
  • 2014-12-06T00:00:00.000(午夜)会标记Hour Ending 24

实际上,这就是我想要存储在我的数据库中的Postgres),TIMESTAMP WITH TIME ZONE值从日期和时间转换而来。序数小时数。所以我的问题是:

  

给定日期和序数“小时结束”号码(1小时夏令时的1 ... 23/24/25),如何转换为日期时间值?

我熟悉Joda-Timejava.time。他们中的任何一个都提供转换方式吗?如果不是,那么什么样的算法处理序数转换和DST?

或者我应该不打这个,只是将本地日期存储为带有序数小时数后缀的字符串?

1 个答案:

答案 0 :(得分:2)

您正在寻找的java.time方法可能是truncatedTo,可用于获取任何ZonedDateTime并截断分钟和秒数

ZonedDateTime zdt = ZonedDateTime.now();
ZonedDateTime rounded = zdt.truncatedTo(ChronoUnit.HOURS);
ZonedDateTime hourEnd = rounded.plusHours(1);