code: public Date rescheduleJob (final TriggerKey triggerKey, final ITrigger newTrigger) throws SchedulerException
    {
      validateState ();
  
      if (triggerKey == null)
        throw new IllegalArgumentException ("triggerKey cannot be null");
      if (newTrigger == null)
        throw new IllegalArgumentException ("newTrigger cannot be null");
  
      final IOperableTrigger trig = (IOperableTrigger) newTrigger;
      final ITrigger oldTrigger = getTrigger (triggerKey);
      if (oldTrigger == null)
      {
        return null;
      }
      trig.setJobKey (oldTrigger.getJobKey ());
      trig.validate ();
  
      ICalendar cal = null;
      if (newTrigger.getCalendarName () != null)
      {
        cal = m_aResources.getJobStore ().retrieveCalendar (newTrigger.getCalendarName ());
      }
      final Date ft = trig.computeFirstFireTime (cal);
  
      if (ft == null)
      {
        throw new SchedulerException ("Based on configured schedule, the given trigger will never fire.");
      }
  
      if (m_aResources.getJobStore ().replaceTrigger (triggerKey, trig))
      {
        notifySchedulerThread (newTrigger.getNextFireTime ().getTime ());
        notifySchedulerListenersUnscheduled (triggerKey);
        notifySchedulerListenersSchduled (newTrigger);
      }
      else
      {
        return null;
      }
  
      return ft;
    }
docs: <p>
  Remove (delete) the <code>{@link com.helger.quartz.ITrigger}</code> with
  the given name, and store the new given one - which must be associated with
  the same job.
  </p>
  
  @param newTrigger
  The new <code>Trigger</code> to be stored.
  @return <code>null</code> if a <code>Trigger</code> with the given name
  &amp; group was not found and removed from the store, otherwise the
  first fire time of the newly scheduled trigger.