code: protected long determineInitialDelay( String initialTimeExpression ) {
          Matcher matcher = RepositoryConfiguration.INITIAL_TIME_PATTERN.matcher(initialTimeExpression);
          if (matcher.matches()) {
              int hours = Integer.valueOf(matcher.group(1));
              int mins = Integer.valueOf(matcher.group(2));
              LocalDateTime dateTime = LocalDateTime.of(LocalDate.now(ZoneOffset.UTC), LocalTime.of(hours, mins));
              long delay = dateTime.toInstant(ZoneOffset.UTC).toEpochMilli() - System.currentTimeMillis();
              if (delay <= 0L) {
                  delay = dateTime.plusDays(1).toInstant(ZoneOffset.UTC).toEpochMilli() - System.currentTimeMillis();
              }
              if (delay < 10000L) delay += 10000L; // at least 10 second delay to let repository finish starting ...
              assert delay >= 0;
              return delay;
          }
          String msg = JcrI18n.invalidGarbageCollectionInitialTime.text(repositoryName(), initialTimeExpression);
          throw new IllegalArgumentException(msg);
      }
docs: Determine the initial delay before the garbage collection process(es) should be run, based upon the supplied initial
  expression. Note that the initial expression specifies the hours and minutes in local time, whereas this method should
  return the delay in milliseconds after the current time.
  
  @param initialTimeExpression the expression of the form "<code>hh:mm</code>"; never null
  @return the number of milliseconds after now that the process(es) should be started