code: private ZonedDateTime previousClosestMatch(final ZonedDateTime date) throws NoSuchValueException {
          ExecutionTimeResult result = new ExecutionTimeResult(date, false);
  
          for (int i = 0; i < MAX_ITERATIONS; i++) {
              result = potentialPreviousClosestMatch(result.getTime());
              if (result.isMatch()) {
                  return result.getTime();
              }
          }
          throw new NoSuchValueException();
      }
docs: If date is not match, will return previous closest match.
  If date is match, will return this date.
  
  @param date - reference ZonedDateTime instance - never null;
  @return ZonedDateTime instance, never null. Value obeys logic specified above.
  @throws NoSuchValueException if there is not previous year