我有以下代码使用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
你应该尽可能远离缩写形式——它们是模棱两可的(非唯一的),通常只定义一个时区的一部分。我吐!