14

我正在尝试做的事情:

从 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

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

  1. 为什么该方法需要一个参数?我本来希望该方法不会期望任何参数,而只是按照我想要的虚构“getOffsetSomehow()”方法的方式行事。
  2. 如何在上面的代码段中获取时区对象?
  3. 什么实际的方法/代码片段可以让我得到我想要得到的“偏移”值?
4

2 回答 2

13

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

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

int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime());
System.out.println(offset);
于 2013-03-25T10:23:13.353 回答
0

2)您可以通过这种方式获取 TimeZone 对象 -TimeZone tz = TimeZone.getTimeZone("Asia/Kolkata");

3 您可以通过这种方法获得偏移值 -

double timezoneval = 0.0;
        Calendar cal = Calendar.getInstance();
        cal.set(2013, 3, 25, 10, 0,0);
        TimeZone tz = TimeZone.getDefault();
        boolean t = tz.inDaylightTime(cal.getTime());
        if (t)
            timezoneval = ((TimeZone.getDefault().getRawOffset())
                    / (60 * 60 * 1000D) + (TimeZone.getDefault()
                    .getDSTSavings() / (60 * 60 * 1000D)));
        else
            timezoneval = ((TimeZone.getDefault().getRawOffset()) / (60 * 60 * 1000D));

1)我没有得到你的问题。

此偏移值将适用于夏令时和非夏令时国家。

于 2013-03-25T11:18:26.690 回答