DateTime到java.sql.timestamp的转换是+1小时

DateTime to java.sql.timestamp conversion is adding +1 hour

我用以下url localhost:8080/api/2016-05-30T10:30:00-05:00/3调用我的rest api

api接收dateString,然后将其转换为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路径参数中收到ISO8601时间,并且基于此我必须从db获取记录。 为此,我将使用两个比较。 1匹配时间,2匹配时区。


ISO 8601声明了这一点

... the time in New York in winter is UTC?05:00

因此,日期字符串中似乎没有包含夏令时,这意味着您获得的是正确的时间,根据定义的时区(-05:00)。 纽约夏令时应-04:00,因为DST不是ISO 8601的一部分。

您可以在数据库中添加额外的DST列或将其添加为参数,或者检查您是否在DST中,该国家/地区(例如卡塔尔不使用它)和年份(例如俄罗斯)不同 几年前已经放弃了DST),所以这不是一个可行的选择......

编辑:
另一种选择是测试时区当前是否处于夏令时,如另一个答案所示。 然后,您可以应用-1h偏移量。

请注意,如果inDaylightTime()返回true,Joda可以使用minusHours()方法。