Определение будущих переходов по часовому поясу

Мне нужно предсказать, когда следующий по крайней мере 2 перехода по часовой пояс будет для определенного часового пояса.

Java 8 предлагает новый API java.time, в частности java.time.zone. ZoneRules.getTransitions() выглядит точно, что мне нужно, но он не перечисляет ничего за 2010 год для "Австралии/Сиднея".

Каков наиболее надежный способ определить следующую дату/время/смещение перехода на 2 временных зоны?

Ответ 1

Метод ZoneRules.getTransitions() не перечисляет все переходы до бесконечности в будущее (очевидно). Это получает следующие два перехода:

ZoneId zoneId = ZoneId.of("Australia/Sydney");
ZoneRules rules = zoneId.getRules();

ZoneOffsetTransition nextTransition = rules.nextTransition(Instant.now());
System.out.println("Next transition at: " +
        nextTransition.getInstant().atZone(zoneId));

ZoneOffsetTransition nextNextTransition =
        rules.nextTransition(nextTransition.getInstant());
System.out.println("Next transition after that at: " +
        nextNextTransition.getInstant().atZone(zoneId));

Вывод:

Следующий переход: 2016-10-02T03: 00 + 11: 00 [Австралия/Сидней]

Следующий переход после этого: 2017-04-02T02: 00 + 10: 00 [Австралия/Сидней]