2016-10-27 4 views
2

Я использую JDK8 zonedatetime получить правила перехода на летнее время, например:ДСТ час от местного часового пояса БД с помощью JDK8

ZoneId zoneIdTmp = ZoneId.of("America/New_York"); 
ZoneRules rules = zoneId.getRules(); 
ZoneOffsetTransition nextTransition = rules.nextTransition(Instant.now()); 

Выход я получаю выглядит следующим образом:

2016-11-06T01:00-05:00[America/New_York] 

DST переключается в 2 часа ночи (назад к 1am) 6-ого ноября. Я предполагаю, что 1:00 утра в выводе выше указывает на новое время после изменения DST и 5:00 указывает на новое смещение от UTC. Я проверил мой локальная база данных часовых поясов

zdump -v /usr/share/zoneinfo/America/New_York 

выход там отображается (приблизительно) Время 2Ат

Sun Nov 6 05:59:59 2016 UT = Sun Nov 6 01:59:59 2016 EDT isdst=1 gmtoff=-14400 

Вместо добавления какой-либо логики себя от выхода JDK, есть ли способ для меня, чтобы получить 2am время от ZoneDateTime (или надежная работая логика, которая работает через различные идентификаторы зоны).

ответ

4

Как вы вывели правило? С toString()? Если вы используете геттеры, есть вся информация, которая выглядит так, как вы, особенно ZoneOffsetTransition.getOffsetBefore() и getOffsetAfter() в сочетании с getInstant() или getDateTimeAfter().

+0

благодаря это было ToString() Ouput (System.out.println), чтобы увидеть, какие ценности у меня было –

1

Для получения требуемой информации я использовал следующее: Метод getDateTimeBefore () ZoneOffsetTransition для получения времени перехода для DST. Выход для Америки/New_York из следующего ZoneOffsetTransition копируется ниже, и то, что я искал:

2016-11-06T02:00 
Смежные вопросы