code: public Optional<ZonedDateTime> nextExecution(final ZonedDateTime date) {
          Preconditions.checkNotNull(date);
          try {
              ZonedDateTime nextMatch = nextClosestMatch(date);
              if (nextMatch.equals(date)) {
                  nextMatch = nextClosestMatch(date.plusSeconds(1));
              }
              return Optional.of(nextMatch);
          } catch (final NoSuchValueException e) {
              return Optional.empty();
          }
      }
docs: Provide nearest date for next execution.
  
  @param date - ZonedDateTime instance. If null, a NullPointerException will be raised.
  @return Optional ZonedDateTime instance, never null. Contains next execution time or empty.