code: @Override
      public ZonedDateTime withZoneSameInstant(ZoneId zone) {
          Jdk8Methods.requireNonNull(zone, "zone");
          return this.zone.equals(zone) ? this :
              create(dateTime.toEpochSecond(offset), dateTime.getNano(), zone);
      }
docs: Returns a copy of this date-time with a different time-zone,
  retaining the instant.
  <p>
  This method changes the time-zone and retains the instant.
  This normally results in a change to the local date-time.
  <p>
  This method is based on retaining the same instant, thus gaps and overlaps
  in the local time-line have no effect on the result.
  <p>
  To change the offset while keeping the local time,
  use {@link #withZoneSameLocal(ZoneId)}.
  
  @param zone  the time-zone to change to, not null
  @return a {@code ZonedDateTime} based on this date-time with the requested zone, not null
  @throws DateTimeException if the result exceeds the supported date range