code: @Override
      public long getLong(TemporalField field) {
          if (field instanceof ChronoField) {
              if (field == NANO_OF_DAY) {
                  return toNanoOfDay();
              }
              if (field == MICRO_OF_DAY) {
                  return toNanoOfDay() / 1000;
              }
              return get0(field);
          }
          return field.getFrom(this);
      }
docs: Gets the value of the specified field from this time as a {@code long}.
  <p>
  This queries this time for the value of 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 time.
  All other {@code ChronoField} instances will throw an {@code UnsupportedTemporalTypeException}.
  <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 UnsupportedTemporalTypeException if the field is not supported
  @throws ArithmeticException if numeric overflow occurs