跨越午夜的Quartz.NET每日时间间隔
本文关键字:时间 每日 NET 午夜 Quartz 跨越 | 更新日期: 2023-09-27 18:07:22
我在我的域模型中为我的计划任务提供了以下配置设置,我正在尝试使用Quartz.NET 2.3.3创建触发器。
- 开始时间
TimeSpan
- 结束时间
TimeSpan
- 重复间隔
TimeSpan
- 启用工作日
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,以指定的间隔在午夜边界上重复(。"每日时间间隔计划"似乎不支持这一点。它只在开始时发射一次,以后再也不会发射了。
我试过使用CronTrigger
,因为它可以跨越午夜边界,但它不能正确地支持一天中的开始/结束时间(例如,0 30-0/30 22-4 ? * *
从晚上10:00到凌晨4:30每30分钟运行一次。
有什么方法可以在Quartz.NET中创建此计划吗?
我通过创建两个Daily Time Interval触发器解决了这个问题。一个触发器的开始时间为晚上10:30,没有结束时间(运行到一天结束(。另一个触发器没有开始时间,但结束时间为凌晨4:00。
使用这两个触发器调度作业会产生所需的激发时间。
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