code: @SuppressWarnings("unchecked")
      public final SelfType startTime(final DateTime when, final TimeSpan jitter)
      {
          // Find the current week day in the same time zone as the "when" time passed in.
          final DateTime now = new DateTime().withZone(when.getZone());
  
          final int startWeekDay = when.getDayOfWeek();
          final int currentWeekDay = now.getDayOfWeek();
  
          // ( x + n ) % n is x for x > 0 and n - x for x < 0.
          final int daysTilStart = (startWeekDay - currentWeekDay + DAYS_PER_WEEK) % DAYS_PER_WEEK;
          Preconditions.checkState(daysTilStart >= 0 && daysTilStart < DAYS_PER_WEEK, "daysTilStart must be 0..%s, but is %s", DAYS_PER_WEEK, daysTilStart);
  
          // same trick as above, add a full week in millis and do the modulo.
          final long millisecondsTilStart = (when.getMillisOfDay() - now.getMillisOfDay() + daysTilStart * MILLIS_PER_DAY + MILLIS_PER_WEEK) % MILLIS_PER_WEEK;
          Preconditions.checkState(millisecondsTilStart >= 0 && millisecondsTilStart < MILLIS_PER_WEEK, "millisecondsTilStart must be 0..%s, but is %s", MILLIS_PER_WEEK, millisecondsTilStart);
  
          this.delay = Duration.millis((long)(ThreadLocalRandom.current().nextDouble() * jitter.getMillis()) + millisecondsTilStart);
          return (SelfType) this;
      }
docs: Set the time-of-day when the first run of the job will take place.