code: @Override
      public ZonedDateTime minus(TemporalAmount amountToSubtract) {
          if (amountToSubtract instanceof Period) {
              Period periodToSubtract = (Period) amountToSubtract;
              return resolveLocal(dateTime.minus(periodToSubtract));
          }
          Objects.requireNonNull(amountToSubtract, "amountToSubtract");
          return (ZonedDateTime) amountToSubtract.subtractFrom(this);
      }
docs: Returns a copy of this date-time with the specified amount subtracted.
  <p>
  This returns a {@code ZonedDateTime}, based on this one, with the specified amount subtracted.
  The amount is typically {@link Period} or {@link Duration} but may be
  any other type implementing the {@link TemporalAmount} interface.
  <p>
  The calculation is delegated to the amount object by calling
  {@link TemporalAmount#subtractFrom(Temporal)}. The amount implementation is free
  to implement the subtraction in any way it wishes, however it typically
  calls back to {@link #minus(long, TemporalUnit)}. Consult the documentation
  of the amount implementation to determine if it can be successfully subtracted.
  <p>
  This instance is immutable and unaffected by this method call.
  
  @param amountToSubtract  the amount to subtract, not null
  @return a {@code ZonedDateTime} based on this date-time with the subtraction made, not null
  @throws DateTimeException if the subtraction cannot be made
  @throws ArithmeticException if numeric overflow occurs