有些企业通过“小时结束”及时跟踪事件。一天中的每个小时由序数表示:
因此,从午夜到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-Time和java.time。他们中的任何一个都提供转换方式吗?如果不是,那么什么样的算法处理序数转换和DST?
或者我应该不打这个,只是将本地日期存储为带有序数小时数后缀的字符串?
答案 0 :(得分:2)
您正在寻找的java.time
方法可能是truncatedTo,可用于获取任何ZonedDateTime
并截断分钟和秒数
ZonedDateTime zdt = ZonedDateTime.now();
ZonedDateTime rounded = zdt.truncatedTo(ChronoUnit.HOURS);
ZonedDateTime hourEnd = rounded.plusHours(1);