1) ZoneRules.of() implies that transitionList is a superset of standardOffsetTransitionList but doesn't check that. Then it's possible to construct ZoneRules instances that don't work correctly: @Test public void zoneRulesTest() { LocalDateTime transitionDay = LocalDateTime.of(2020, 1, 1, 2, 0); ZoneOffsetTransition trans = ZoneOffsetTransition.of( transitionDay, ZoneOffset.ofHours(1), ZoneOffset.ofHours(2) ); ZoneRules rules = ZoneRules.of(ZoneOffset.ofHours(1), ZoneOffset.ofHours(1), Arrays.asList(trans), Collections.emptyList(), Collections.emptyList());
Assert.assertEquals(ZoneOffset.ofHours(2), rules.getOffset( transitionDay.plusDays(7).toInstant(ZoneOffset.UTC))); } 2) Unrelated issue in java-time code: in ZoneOffsetTransitionRule, there is a typo, some variables are called "timeDefnition" (missed "i") and it leaks to public Javadoc.