java - 一天中的顺序小时 "Hour Ending"转换为日期时间值

标签 java sql datetime jodatime java-time

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

  • 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-Timejava.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/

相关文章:

java - JNLP从相对地址加载jar

mysql - 执行查询然后过滤内存中的结果或执行精确的查询,哪一个更好,为什么?

sql - 安装 SSDT (SQL Server Data Tools) 时出错

mysql - 无法将两个查询合并为一个

javascript - 如何使用 JavaScript 将字符串 mm/dd/yyyy 转换为日期 mm/dd/yyyy?

java - 使用 Jersey Test Framework、TestNG 和 Maven 进行内存测试

java - 如何去掉顶部标题

java - 如何配置 Tomcat 以使用 Java 7

python - 看不懂这个定时while循环属性报错

ruby-on-rails - Rails-获取当前星期和月份的开始和结束日期