ITrigger 的 GetFireTimeAfter 方法返回一个属于 HolidayCalender 的日期

GetFireTimeAfter method of ITrigger returning a date which is part of HolidayCalender

对于我要为不应触发触发器的特定日期添加假期日历的现有每日计划,

以下代码用于将日历添加到日程表,

    ISchedulerFactory sf = new StdSchedulerFactory(config);
    Instance = sf.GetScheduler();            
    HolidayCalendar cal = new HolidayCalendar();
    cal.AddExcludedDate(new DateTime(2017, 11, 24));
    cal.AddExcludedDate(new DateTime(2017, 11, 25));
    Instance.AddCalendar("Cal", cal, false,true);

现在,我将此现有日历与触发器相关联,

var trigger1 = Instance.GetTriggersOfJob(new JobKey(jc.Name)).First().GetTriggerBuilder().ModifiedByCalendar("Cal").Build();

最后我打印了触发触发器的所有日期,

while (startTimeUTC < DateTime.Parse("11-21-2017").AddDays(8))
{
  var nextFireTime = trigger1.GetFireTimeAfter(startTimeUTC);
  Console.WriteLine(" :  " + nextFireTime);
  if (nextFireTime == null) break;
  startTimeUTC = (DateTimeOffset)nextFireTime;
}

但在输出中,我得到日期 24-11-2017 和 25-11-2017 以及其他日期。由于我已将日期 24-11-2017 和 25-11-2017 添加为假期,因此不应通过 GetFireTimeAfter() 方法返回。 我有什么遗漏吗?

方法 GetFireTimeAfter 不检查返回的触发时间是否与触发器关联日历中排除的日期匹配。

您可以使用另一种方法来列出真实的火灾时间,同时考虑到给定的日历,是:

var fireTimes = TriggerUtils.ComputeFireTimes((IOperableTrigger)trigger1, cal, 30);