--- old/src/java.base/share/classes/java/time/zone/ZoneRules.java 2020-03-08 18:05:39.000000000 -0700 +++ new/src/java.base/share/classes/java/time/zone/ZoneRules.java 2020-03-08 18:05:39.000000000 -0700 @@ -470,7 +470,10 @@ * @return true if the time-zone is fixed and the offset never changes */ public boolean isFixedOffset() { - return savingsInstantTransitions.length == 0; + return standardOffsets[0].equals(wallOffsets[0]) && + standardTransitions.length == 0 && + savingsInstantTransitions.length == 0 && + lastRules.length == 0; } /** @@ -486,7 +489,7 @@ */ public ZoneOffset getOffset(Instant instant) { if (savingsInstantTransitions.length == 0) { - return standardOffsets[0]; + return wallOffsets[0]; } long epochSec = instant.getEpochSecond(); // check if using last rules @@ -572,7 +575,7 @@ * There are various ways to handle the conversion from a {@code LocalDateTime}. * One technique, using this method, would be: *
- * List<ZoneOffset> validOffsets = rules.getOffset(localDT); + * List<ZoneOffset> validOffsets = rules.getValidOffsets(localDT); * if (validOffsets.size() == 1) { * // Normal case: only one valid offset * zoneOffset = validOffsets.get(0); @@ -640,8 +643,8 @@ } private Object getOffsetInfo(LocalDateTime dt) { - if (savingsInstantTransitions.length == 0) { - return standardOffsets[0]; + if (savingsLocalTransitions.length == 0) { + return wallOffsets[0]; } // check if using last rules if (lastRules.length > 0 && @@ -756,7 +759,7 @@ * @return the standard offset, not null */ public ZoneOffset getStandardOffset(Instant instant) { - if (savingsInstantTransitions.length == 0) { + if (standardTransitions.length == 0) { return standardOffsets[0]; } long epochSec = instant.getEpochSecond(); @@ -786,7 +789,7 @@ * @return the difference between the standard and actual offset, not null */ public Duration getDaylightSavings(Instant instant) { - if (savingsInstantTransitions.length == 0) { + if (isFixedOffset()) { return Duration.ZERO; } ZoneOffset standardOffset = getStandardOffset(instant);