为什么这个Joda抵消不能得到正确的日光

时间:2014-08-22 19:11:10

标签: timezone jodatime dst

我有以下代码使用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

2 个答案:

答案 0 :(得分:3)

您明确告诉它忽略夏令时。

EST是东部标准时间,与EDT明显不同,后者是夏令时。

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

DateTimeZone.forID("US/Eastern")

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

答案 1 :(得分:0)

您需要提供时区ID - 而不是时区“半”的缩写。因此,例如,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

你应该尽可能远离缩略形式 - 它们是模棱两可的(非独特的),通常只定义时区的一部分。 ICK。