code: public static OffsetTime ofInstant(Instant instant, ZoneId zone) {
          Objects.requireNonNull(instant, "instant");
          Objects.requireNonNull(zone, "zone");
          ZoneRules rules = zone.getRules();
          ZoneOffset offset = rules.getOffset(instant);
          long localSecond = instant.getEpochSecond() + offset.getTotalSeconds();  // overflow caught later
          int secsOfDay = (int) Math.floorMod(localSecond, SECONDS_PER_DAY);
          LocalTime time = LocalTime.ofNanoOfDay(secsOfDay * NANOS_PER_SECOND + instant.getNano());
          return new OffsetTime(time, offset);
      }
docs: Obtains an instance of {@code OffsetTime} from an {@code Instant} and zone ID.
  <p>
  This creates an offset time with the same instant as that specified.
  Finding the offset from UTC/Greenwich is simple as there is only one valid
  offset for each instant.
  <p>
  The date component of the instant is dropped during the conversion.
  This means that the conversion can never fail due to the instant being
  out of the valid range of dates.
  
  @param instant  the instant to create the time from, not null
  @param zone  the time-zone, which may be an offset, not null
  @return the offset time, not null