Почему метод getOffset () joda DateTimeZone требует "мгновенного"?
Что я пытаюсь сделать:
Из объекта 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
У объекта DateTimeZone в Joda есть метод getOffset, который принимает параметр. Вопрос:
- зачем этому методу нужен параметр? Я бы ожидал, что метод не будет ожидать каких-либо параметров, и просто буду вести себя так, как мне нужен мой вымышленный метод getOffsetSomehow().
- Как я могу получить объекты часового пояса в моем фрагменте выше?
- Какой фактический метод / фрагмент кода может дать мне значения "смещения", которые я пытаюсь получить?
2 ответа
Решение
Это потому, что смещение меняется со временем. Одним из примеров является летнее время. Другая - это страна, решившая перейти в другой часовой пояс.
Если вы хотите текущее смещение, просто сдавайте его сейчас так:
int offset = DateTimeZone.forID("Europe/Berlin").getOffset(new DateTime());
System.out.println(offset);
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) Я не получил ваш вопрос.
Это значение смещения будет применимо для страны, использующей дневной свет и не использующей дневной свет.