1
有些商家通过“小时结束”跟踪事件。一天中的每个小时由序数表示:序号时段“小时结束”转换为日期时间值
- 1 ... 24为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小时DST的地点为1 ... 23/24/25),如何转换为日期时间值?
我熟悉Joda-Time和java.time。他们中的任何一个都提供了一种转换方式?如果没有,那么什么样的算法可以处理序号转换和DST?
或者我不应该打这个,只是将当地的日期存储为一个字符串与后缀的小时数?
你实际上并不需要java.time或乔达这一点。难道你不能只使用一个普通的'日历'对象,设置日,月和年,将其设置为午夜,然后添加正确的小时数?这将在夏时制的开始和结束时起作用。 – 2014-12-05 23:58:55
@DavidWallace作为一项政策,我避免了java.util.Date/.Calendar的混乱。但是你的想法看起来很合理而且很简单。 Joda-Time使用'withTimeAtStartOfDay'方法来获取一天中的第一个时刻。 'plusHours'方法可以使用“小时结束”号码来达到日期时间值。对于从日期+小时结束到日期 - 时间的转换,这应该有效。换个方式,我不确定。 – 2014-12-06 01:30:34
换个角度来说,你只需要在给定的时间和当天的午夜之间在几小时内取得差异。 – 2014-12-06 01:32:26