Почему метод joda DateTimeZone getOffset() требует "мгновенного"? - программирование
Подтвердить что ты не робот

Почему метод joda DateTimeZone getOffset() требует "мгновенного"?

Что я пытаюсь сделать:

Из объекта 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, который принимает параметр. Вопрос:

  • почему этот метод нуждается в параметре? Я бы ожидал, что метод не будет ожидать какого-либо параметра и просто будет вести себя так, как мне нужен мой фиктивный метод getOffsetSomehow().
  • Как я могу получить объекты часового пояса в моем фрагменте выше?
  • Какой фактический метод/фрагмент кода может получить мне значения "смещения", которые я пытаюсь получить?
4b9b3361

Ответ 1

Это, потому что смещение изменяется со временем. Одним из примеров является переход на летнее время. Еще одна страна, решившая переехать в другой часовой пояс.

Если вы хотите текущее смещение, просто выполните сейчас:

int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime());
System.out.println(offset);

Ответ 2

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) Я не получил ваш вопрос.

Это значение смещения будет применимо для страны с сохранением дневного света и экономии времени суток.