我正在使用以下网址rest
localhost:8080/api/2016-05-30T10:30:00-05:00/3
api
api接收date
为String
,然后将其转换为jodatime datetime对象,如dateTime = DateTime.parse(date);
...调试此代码显示其产生的预期值。
但是,当我将此日期转换为java.sql.timestamp
Timestamp ts = new Timestamp(dateTime.getMillis());
时......结果时间为2016-05-30 11:30:00.0
...为什么要将+1 hour
添加到时间什么是正确的转换方式?
一些背景
我已将时间保存为sql表中的时间戳。在单独的列中使用时区(例如,字符串+4:00或-5:00)。
我会在我的url path参数中收到ISO8601
时间,并且基于此我必须从db获取记录。为此,我将使用两个比较。 1匹配时间,2匹配时区。
答案 0 :(得分:1)
ISO 8601表示
... winter 在纽约的时间是UTC-05:00
所以似乎daylight saving time 不包含在日期字符串中,这意味着您获得的是正确的时间,根据定义的时区(-05:00
)。纽约夏季时间应为-04:00
,因为DST不是ISO 8601的一部分。
您可以在数据库中添加额外的DST列或将其添加为参数,或者检查您是否在使用DST,这在不同的国家/地区(例如卡塔尔不使用它)和逐年(例如,几年前俄罗斯已经放弃了DST),所以这不是一个可行的选择......
编辑: 另一种选择是测试时区当前是否在DST中,如another answer所示。然后,您可以应用-1h偏移。
请注意,如果minusHours()
返回true
,则Joda可以使用inDaylightTime()
方法。