import java.time.*;
import java.time.zone.ZoneOffsetTransition;
import java.time.zone.ZoneOffsetTransitionRule;
import java.time.zone.ZoneRules;
import java.util.Collections;

public class ZoneRulesBug {

    public static void main(String[] args) {
        Instant maxLocalDateTime = LocalDateTime.of(Year.MAX_VALUE,
                12,
                31,
                23,
                59,
                59,
                999999999).toInstant(ZoneOffset.UTC);
        ZoneOffset offsetZero = ZoneOffset.ofHours(0);
        ZoneOffset offsetPlusOneHour = ZoneOffset.ofHours(1);
        ZoneRules zoneRulesA = ZoneRules.of(offsetPlusOneHour);
        ZoneOffsetTransition transition = ZoneOffsetTransition.of(LocalDateTime.ofEpochSecond(0, 0, offsetZero),
                offsetZero,
                offsetPlusOneHour);
        ZoneOffsetTransitionRule transitionRule = ZoneOffsetTransitionRule.of(Month.JANUARY,
                1,
                DayOfWeek.SUNDAY,
                LocalTime.MIDNIGHT,
                true,
                ZoneOffsetTransitionRule.TimeDefinition.STANDARD,
                offsetZero,
                offsetZero,
                offsetPlusOneHour);
        ZoneRules zoneRulesB = ZoneRules.of(offsetZero,
                offsetZero,
                Collections.singletonList(transition),
                Collections.singletonList(transition),
                Collections.singletonList(transitionRule));
        ZoneOffset offsetA = zoneRulesA.getOffset(maxLocalDateTime);
        ZoneOffset offsetB = zoneRulesB.getOffset(maxLocalDateTime);
        boolean areEqual = offsetA.equals(offsetB);
        System.out.println(areEqual);
    }
}
