为什么这个Joda偏移不能使夏令时正确



我有以下代码使用Joda计算任何给定日期的偏移量,例如

int offset = DateTimeZone.forID("EST").getOffset(new DateTime(2013,8,1,1,1));

这将给我-18000000的偏移量。但对于:

 int offset = DateTimeZone.forID("EST").getOffset(new DateTime(2012,12,1,1,1));

这也给了我-18000000的偏移。

看来计算时没有考虑夏令时。有人知道为什么吗?谢谢。

我使用的是Joda-time-2.3

您明确地告诉它忽略日光节约时间。

EST是东部标准时间,与EDT明显不同,EDT是日光节约时间。

相反,尝试使用ID US/Eastern,所以

DateTimeZone.forID("US/Eastern")

可用时区的完整列表可以在这里找到。US/Eastern是America/New_York的别名

您需要提供一个时区ID -而不是时区"half"的缩写。例如,America/New_York是东部时间的时区ID的一个示例(还有其他的,对于现在可能像纽约的时区,但在历史上不是,等等)。

import org.joda.time.*;
class Test {
    public static void main(String[] args) {
        DateTimeZone zone = DateTimeZone.forID("America/New_York");
        System.out.println(zone.getOffset(new DateTime(2013,8,1,1,1)));
        System.out.println(zone.getOffset(new DateTime(2012,12,1,1,1)));
   }
}
输出:

-14400000
-18000000

你应该尽可能远离缩写形式——它们是模棱两可的(非唯一的),通常只定义一个时区的一部分。我吐!

相关内容

  • 没有找到相关文章

最新更新