为什么joda DateTimeZone的getOffset()方法需要"即时"?

jrh*_*ath 14 java timezone datetime jodatime

我正在做的事情:

从DateTimeZone对象,我试图以毫秒为单位获取GMT偏移量.例:

DateTimeZone gmt= // somehow get gmt zone object
long offset = gmt.getOffsetSomehow(); // expect offset = 0

DateTimeZone ny_est = // somehow get that time zone object representing "EST" offset of NY zone
long offset = ny_est.getOffsetSomehow(); // expect offset = -18000000 = -5*60*60*1000

DateTimeZone hkt = // somehow get HK time zone object
long offset = hkt.getOffsetSomehow(); // expect offset = 28800000 = 8*60*60*1000
Run Code Online (Sandbox Code Playgroud)

Joda的DateTimeZone对象有一个名为getOffset的方法,它接受一个参数.题:

  1. 为什么那个方法需要一个参数?我原本期望该方法不要指望任何参数,只是表现我想要我的虚构"getOffsetSomehow()"方法.
  2. 如何在上面的代码段中获取时区对象?
  3. 什么样的实际方法/代码片段可以获得我试图得到的"偏移"值?

Tim*_*the 13

这是因为偏移量随时间而变化.一个例子是夏令时.另一个国家决定转移到另一个时区.

如果你想要当前的偏移量,现在就像这样:

int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime());
System.out.println(offset);
Run Code Online (Sandbox Code Playgroud)