Java “每天的第几小时”;小时结束“;转换为日期时间值
一些企业通过“小时结束”来及时跟踪事件。一天中的每个小时都由序号表示:Java “每天的第几小时”;小时结束“;转换为日期时间值,java,sql,datetime,jodatime,java-time,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将标记小时结束01 2014-12-06T00:00:00.000(午夜)将标志着24小时结束 事实上,这
- UTC为1…24
- 1…23、1…24和1…25适用于具有一小时夏令时(DST)调整的时区
小时
对我来说,这似乎是一种追踪时间的愚蠢方式。更明智的做法是采用半开放式的方法,即开始是包含的,结束是独占的。因此:
2014-12-05T01:00:00.000
将标记小时结束01
2014-12-06T00:00:00.000
(午夜)将标志着24小时结束
事实上,这就是我想要存储在数据库()中的内容,一个从日期和序号转换而来的值。所以我的问题是:
给定一个日期和顺序“小时结束”数字(1…23/24/25表示1小时DST的位置),如何转换为日期时间值
我对和很熟悉。它们都提供了转换方法吗?如果没有,什么样的算法同时处理序数转换和DST
或者我不应该反对这一点,而只是将本地日期存储为带有序号后缀的字符串?也许您正在寻找的java.time
方法是,它可以用于获取任何ZoneDateTime
并截断分和秒
ZonedDateTime zdt = ZonedDateTime.now();
ZonedDateTime rounded = zdt.truncatedTo(ChronoUnit.HOURS);
ZonedDateTime hourEnd = rounded.plusHours(1);
实际上,您不需要java.time或Joda来完成此任务。您能否只使用普通的日历对象,设置日期、月份和年份,将其设置为午夜,然后添加正确的小时数?这将在夏令时开始和结束时起作用。@DavidWallace作为一项策略,我可以避免java.util.Date/.Calendar的混乱。但是您的idea似乎听起来非常简单。Joda Time有一种方法with timeatstartofDay
来获取一天中的第一个时刻。这种方法plusHours
可以使用“小时结束”得出日期-时间值的数字。对于从日期+小时数到日期-时间的转换,这应该有效。换一种方式,我不确定。换一种方式,您只需计算给定时间与当天午夜之间的小时差。