Joda-Time欧洲/柏林的日期时间夏令时

时间:2014-04-07 16:06:23

标签: java scala timezone jodatime datetime-format

如何使用Joda-Time日期时间解析日期字符串,该日期字符串使用正确的时区和夏令时?

作为scala中的一个例子,我尝试解析字符串" 2014-04-07 01:00:00.000" (没有时区信息)。这个日期来自MySQL,应该在tz Europe / Berlin +01:00。我喜欢的是根据2014-04-07 00:00:00 + 01:00的joda约会时间,这是欧洲/柏林目前没有在DST(GMT +1)的时区。

val fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS").withZone(DateTimeZone.forID("Europe/Berlin"))
val dt = fmt.parseDateTime("2014-04-07 01:00:00.000")

不幸的是,Joda-Time将日期解析为2014-04-07T01:00:00.000 + 02:00,这是当前错误的偏移(02:00而不是01:00)

如何让Joda-Time用正确的DST偏移量解析日期?

1 个答案:

答案 0 :(得分:5)

Joda-Time是对的。您对柏林+01:00的假设是不正确的。您没有考虑夏令时。

根据TimeZoneConverter.com上this page的时区"欧洲/柏林",Daylight Saving Time(DST)于2014年3月30日凌晨02:00开始: 00 AM当本地时钟向前设置1小时。根据维基百科的time zone names列表,这意味着柏林从提前一小时(+01:00)转变为提前两小时(+02:00)。