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

时间:2016-04-24 17:35:19

标签: java datetime timestamp jodatime date-conversion

我正在使用以下网址rest

呼叫我的localhost:8080/api/2016-05-30T10:30:00-05:00/3 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 path参数中收到ISO8601时间,并且基于此我必须从db获取记录。为此,我将使用两个比较。 1匹配时间,2匹配时区。

1 个答案:

答案 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()方法。