JodaTime 夏令时错误

Posted

技术标签:

【中文标题】JodaTime 夏令时错误【英文标题】:JodaTime daylight saving bug 【发布时间】:2012-11-25 23:22:32 【问题描述】:

我想从 ISO8601 字符串创建一个 DateTime 对象(例如,2012-11-05T07:00:00+0000)。代码如下:

...
DateTime day = new DateTime(dateStr);
System.out.println(dateStr + "=>" + day);

我得到了这些结果:

...
2012-11-04T07:00:00+0000=>2012-11-04T00:00:00.000-07:00
2012-11-05T07:00:00+0000=>2012-11-04T23:00:00.000-08:00
2012-11-06T08:00:00+0000=>2012-11-06T00:00:00.000-08:00
...

11-0411-06 是正确的,但 11-05 是错误的。如何解决?我在北美西海岸。

【问题讨论】:

是什么让你认为这是错误的? 不应该是2012-11-05T00:00:00.000-07:00 @xuc:你为什么会这样? 【参考方案1】:

11-05 哪里错了? 11 月 4 日当地时间凌晨 2 点(即 UTC 上午 9 点),west coast time 从 UTC-7 变为 UTC-8。

现在 11 月 5 日早上 7 点 UTC,这是您的第二行,那个时间点之后,因此它是 UTC-8 是正确的......因此当地时间是晚上 11 点11 月 4 日,如图所示。

Joda Time 就在这里(不出所料)。

【讨论】:

你是对的。似乎错误的是来源 (dateStr) 而不是 JodaTime。

以上是关于JodaTime 夏令时错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 Joda Time 的情况下在 Java 7 中正确处理夏令时?

在 Joda Time 的帮助下使用夏令时的正确方法

如何在 Joda Time 中检测模糊的 DST 重叠?

.NET TimeZoneInfo 关于夏令时错误

Spring @DateTimeFormat 转换错误与夏令时

Node.js 错误地识别夏令时