< prev index next >

src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java

Print this page

        

@@ -102,10 +102,14 @@
     /**
      * Serialization version.
      */
     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;
     /**
      * The offset before transition.

@@ -150,10 +154,11 @@
      * @param transition  the transition date-time with the offset before the transition, not null
      * @param offsetBefore  the offset before the transition, not null
      * @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;
     }
 

@@ -163,10 +168,11 @@
      * @param epochSecond  the transition epoch-second
      * @param offsetBefore  the offset before the transition, not null
      * @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;
     }
 

@@ -207,11 +213,11 @@
      *
      * @param out  the output stream, not null
      * @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);
     }
 
     /**

@@ -251,11 +257,11 @@
      * Gets the transition instant as an epoch second.
      *
      * @return the transition epoch second
      */
     public long toEpochSecond() {
-        return transition.toEpochSecond(offsetBefore);
+        return epochSecond;
     }
 
     //-------------------------------------------------------------------------
     /**
      * Gets the local transition date-time, as would be expressed with the 'before' offset.

@@ -395,12 +401,18 @@
      * @param transition  the transition to compare to, not null
      * @return the comparator value, negative if less, positive if greater
      */
     @Override
     public int compareTo(ZoneOffsetTransition transition) {
+        if (epochSecond < transition.epochSecond) {
+            return -1;
+        } else if (epochSecond > transition.epochSecond) {
+            return 1;
+        } else {
         return this.getInstant().compareTo(transition.getInstant());
     }
+    }
 
     //-----------------------------------------------------------------------
     /**
      * Checks if this object equals another.
      * <p>

@@ -414,11 +426,12 @@
         if (other == this) {
             return true;
         }
         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;
     }
 
< prev index next >