确定未来的时区转换

pst*_*ton 12 java java-8 java-time

我需要预测下一个至少2个时区转换何时适用于特定时区.

Java 8特别提供了新的java.timeAPI java.time.zone.ZoneRules.getTransitions()看起来正是我需要的,但它没有列出2010年以后的"澳大利亚/悉尼".

确定下一个2时区转换的日期/时间/偏移的最可靠方法是什么?

Jes*_*per 15

该方法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));
Run Code Online (Sandbox Code Playgroud)

输出:

下一次转型时间:2016-10-02T03:00 + 11:00 [澳大利亚/悉尼]

之后的下一次过渡:2017-04-02T02:00 + 10:00 [澳大利亚/悉尼]

  • @Thirler这并不是说努力建设一个自己的'getFutureTransitions()`具有无限`Stream`:`Stream.iterate(rules.nextTransition(Instant.now()),T - > rules.nextTransition(t.getInstant ()))` (3认同)
  • 是的,仍然感到惊讶'getTransitions'至少没有列出今天(即所有过去) - 感谢解决方案,效果很好. (2认同)
  • `ZoneRules`的状态有两部分 - 通过`getTransitions()`访问的转换(已知历史)和通过`getTransitionRules()`访问的转换规则(不确定的未来).`nextTransition(Instant)`方法将两个状态粘合在一起. (2认同)