code: @Override
      public long getLong(TemporalField field) {
          if (field instanceof ChronoField) {
              switch ((ChronoField) field) {
                  case NANO_OF_SECOND: return nanos;
                  case MICRO_OF_SECOND: return nanos / 1000;
                  case MILLI_OF_SECOND: return nanos / NANOS_PER_MILLI;
                  case INSTANT_SECONDS: return seconds;
              }
              throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
          }
          return field.getFrom(this);
      }
docs: Gets the value of the specified field from this instant as a {@code long}.
  <p>
  This queries this instant for the value for the specified field.
  If it is not possible to return the value, because the field is not supported
  or for some other reason, an exception is thrown.
  <p>
  If the field is a {@link ChronoField} then the query is implemented here.
  The {@link #isSupported(TemporalField) supported fields} will return valid
  values based on this date-time.
  All other {@code ChronoField} instances will throw a {@code DateTimeException}.
  <p>
  If the field is not a {@code ChronoField}, then the result of this method
  is obtained by invoking {@code TemporalField.getFrom(TemporalAccessor)}
  passing {@code this} as the argument. Whether the value can be obtained,
  and what the value represents, is determined by the field.
  
  @param field  the field to get, not null
  @return the value for the field
  @throws DateTimeException if a value for the field cannot be obtained
  @throws ArithmeticException if numeric overflow occurs