Quartz.NET 跨午夜的每日时间间隔

Quartz.NET Daily Time Interval across midnight

我在我的域模型中为我的计划任务设置了以下配置设置,我正在尝试使用 Quartz.NET 2.3.3.

创建触发器
  1. 开始时间TimeSpan
  2. 结束时间TimeSpan
  3. 重复间隔TimeSpan
  4. 已启用工作日DayOfWeek[]

我可以使用此信息成功创建每日时间间隔触发器。

var trigger = TriggerBuilder
    .Create()
    .WithDailyTimeIntervalSchedule(c => c
        .StartingDailyAt(scheduledTask.StartTime.ToTimeOfDay())
        .EndingDailyAt(scheduledTask.EndTime?.ToTimeOfDay())
        .OnDaysOfTheWeek(scheduledTask.WeekdaysEnabled.ToDaysOfWeek().ToArray())
        .WithIntervalInSeconds((int)scheduledTask.RepeatInterval.TotalSeconds)
        .InTimeZone(timeZoneInfo))
    .Build();

但是,我配置的 EndTime 有可能 StartTime 之前。例如,22:30 到 04:00(运行 从 10:30 下午到第二天 4:00 上午,以指定的时间间隔重复,跨越午夜边界。 Daily Time Interval Schedule 似乎不支持这一点。它只在开始时触发一次,以后不会再触发。

我试过使用 CronTrigger,因为它可以跨越午夜边界,但这不支持正确的 start/end 一天中的时间(例如 0 30-0/30 22-4 ? * * 每从 10:00 下午到 4:30 上午 30 分钟。

有什么方法可以在 Quartz.NET 内创建这个时间表吗?

我通过创建两个每日时间间隔触发器解决了这个问题。一个触发器的开始时间为 10:30 下午,没有结束时间(一直运行到当天结束)。另一个触发器没有开始时间,但结束时间为 4:00 AM。

使用这两个触发器安排作业会产生所需的触发时间。

1/01/2015 10:30:00 PM
1/01/2015 11:00:00 PM
1/01/2015 11:30:00 PM
2/01/2015 12:00:00 AM
2/01/2015 12:30:00 AM
2/01/2015 1:00:00 AM
2/01/2015 1:30:00 AM
2/01/2015 2:00:00 AM
2/01/2015 2:30:00 AM
2/01/2015 3:00:00 AM
2/01/2015 3:30:00 AM
2/01/2015 4:00:00 AM
2/01/2015 10:30:00 PM
2/01/2015 11:00:00 PM
2/01/2015 11:30:00 PM
3/01/2015 12:00:00 AM
3/01/2015 12:30:00 AM
3/01/2015 1:00:00 AM
3/01/2015 1:30:00 AM
3/01/2015 2:00:00 AM
3/01/2015 2:30:00 AM
3/01/2015 3:00:00 AM
3/01/2015 3:30:00 AM
3/01/2015 4:00:00 AM