一些企业通过“小时结束”来及时跟踪事件。一天中的每个小时都由一个序数表示:
- UTC 时间为 1…24
- 1…23、1…24 和 1…25 适用于夏令时 (DST) 调整一小时的时区。
因此,一天中的第一个小时,从午夜到 01:00 是结束时间 01
。
对我来说,这似乎是一种愚蠢的追踪时间的方式。更明智的做法是通过半开放方式使用时间,[)
,其中开始是包容性的,结束是排他性的。所以:
2014-12-05T01:00:00.000
将标记Hour Ending 01
2014-12-06T00:00:00.000
(午夜)将标记结束时间 24
。
确实,这就是我想要存储在数据库中的内容 ( Postgres ),一个 TIMESTAMP WITH TIME ZONE从日期和序数小时数转换的值。所以我的问题是:
Given a date and an ordinal "Hour Ending" number (1…23/24/25 for locality with 1-hour DST), how do I convert to a date-time value?
我熟悉Joda-Time和 java.time 。他们中的任何一个都提供转换方法吗?如果不是,什么样的算法可以同时处理序数转换和 DST?
或者我不应该反对这个,而只是将本地日期存储为带有序数小时数后缀的字符串吗?
最佳答案
也许您正在寻找的java.time
方法是truncatedTo ,可用于获取任何 ZonedDateTime
并截断分钟和秒
ZonedDateTime zdt = ZonedDateTime.now();
ZonedDateTime rounded = zdt.truncatedTo(ChronoUnit.HOURS);
ZonedDateTime hourEnd = rounded.plusHours(1);
关于java - 一天中的顺序小时 "Hour Ending"转换为日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326243/