--- old/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java 2015-04-29 11:24:22.729287536 +0200 +++ new/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java 2015-04-29 11:24:22.640287457 +0200 @@ -104,6 +104,10 @@ */ private static final long serialVersionUID = -6946044323557704546L; /** + * The transition epoch-second. + */ + private final long epochSecond; + /** * The local transition date-time at the transition. */ private final LocalDateTime transition; @@ -152,6 +156,7 @@ * @param offsetAfter the offset at and after the transition, not null */ ZoneOffsetTransition(LocalDateTime transition, ZoneOffset offsetBefore, ZoneOffset offsetAfter) { + this.epochSecond = transition.toEpochSecond(offsetBefore); this.transition = transition; this.offsetBefore = offsetBefore; this.offsetAfter = offsetAfter; @@ -165,6 +170,7 @@ * @param offsetAfter the offset at and after the transition, not null */ ZoneOffsetTransition(long epochSecond, ZoneOffset offsetBefore, ZoneOffset offsetAfter) { + this.epochSecond = epochSecond; this.transition = LocalDateTime.ofEpochSecond(epochSecond, 0, offsetBefore); this.offsetBefore = offsetBefore; this.offsetAfter = offsetAfter; @@ -209,7 +215,7 @@ * @throws IOException if an error occurs */ void writeExternal(DataOutput out) throws IOException { - Ser.writeEpochSec(toEpochSecond(), out); + Ser.writeEpochSec(epochSecond, out); Ser.writeOffset(offsetBefore, out); Ser.writeOffset(offsetAfter, out); } @@ -253,7 +259,7 @@ * @return the transition epoch second */ public long toEpochSecond() { - return transition.toEpochSecond(offsetBefore); + return epochSecond; } //------------------------------------------------------------------------- @@ -397,7 +403,13 @@ */ @Override public int compareTo(ZoneOffsetTransition transition) { - return this.getInstant().compareTo(transition.getInstant()); + if (epochSecond < transition.epochSecond) { + return -1; + } else if (epochSecond > transition.epochSecond) { + return 1; + } else { + return this.getInstant().compareTo(transition.getInstant()); + } } //----------------------------------------------------------------------- @@ -416,7 +428,8 @@ } if (other instanceof ZoneOffsetTransition) { ZoneOffsetTransition d = (ZoneOffsetTransition) other; - return transition.equals(d.transition) && + return epochSecond == d.epochSecond && + transition.equals(d.transition) && offsetBefore.equals(d.offsetBefore) && offsetAfter.equals(d.offsetAfter); } return false;