我的域模型中有以下配置设置用于我的计划任务,我正在尝试使用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();
然而,在 StartTime之前,我配置的EndTime可能是。例如,22:30到04:00(从下午10:30到第二天凌晨4:00,以指定的间隔重复,跨过午夜边界)。每日时间间隔时间表似乎不支持这一点。它只会在开始时触发一次,而不会再次触发。
我尝试过使用CronTrigger
,因为这适用于午夜边界,但这并不能正常支持一天的开始/结束时间(例如。0 30-0/30 22-4 ? * *
每30分钟运行一次从晚上10点到凌晨4:30。
有没有办法在Quartz.NET中创建这个计划?
答案 0 :(得分:5)
我能够通过创建两个每日时间间隔触发器来解决这个问题。一个触发器的开始时间为晚上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