Bit*_*der 35 c# scheduling intervals quartz.net quartz.net-2.0
我试图在Quartz.Net中建立一个重复的每日时间表,但有一些问题:
首先,我建立一个每日时间表,在12:45重复使用Quartz.Net代码,如下所示:
var trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(s =>
s.OnEveryDay().StartingDailyAt(new TimeOfDay(13, 00)))
.Build();
var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);
foreach (var time in times) Console.WriteLine(time);
Run Code Online (Sandbox Code Playgroud)
这是在新西兰,夏令时执行(所以UTC + 13:00)
我得到的输出很奇怪:
5/10/2012 1:00:00 p.m. +13:00
5/10/2012 12:01:00 a.m. +00:00
5/10/2012 12:02:00 a.m. +00:00
5/10/2012 12:03:00 a.m. +00:00
5/10/2012 12:04:00 a.m. +00:00
5/10/2012 12:05:00 a.m. +00:00
5/10/2012 12:06:00 a.m. +00:00
5/10/2012 12:07:00 a.m. +00:00
5/10/2012 12:08:00 a.m. +00:00
5/10/2012 12:09:00 a.m. +00:00
Run Code Online (Sandbox Code Playgroud)
第一个日期/时间使用本地时区显示,其余时间以UTC显示,每个时间值增加1分钟,日期永远不会改变.
我觉得我可能会错过一些基本的日常时间间隔时间表,但我只是不知道它是什么?
编辑
作为执行此操作的更新,我现在已切换到使用基于CRON表达式的触发器:
TriggerBuilder.Create()
.WithCronSchedule(string.Format("0 {0} {1} ? * *", 0, 13))
.Build();
Run Code Online (Sandbox Code Playgroud)
它给了我我期望的结果:
5/10/2012 12:00:00 a.m. +00:00
6/10/2012 12:00:00 a.m. +00:00
7/10/2012 12:00:00 a.m. +00:00
8/10/2012 12:00:00 a.m. +00:00
9/10/2012 12:00:00 a.m. +00:00
10/10/2012 12:00:00 a.m. +00:00
11/10/2012 12:00:00 a.m. +00:00
12/10/2012 12:00:00 a.m. +00:00
13/10/2012 12:00:00 a.m. +00:00
14/10/2012 12:00:00 a.m. +00:00
Run Code Online (Sandbox Code Playgroud)
但我仍然想知道为什么DailyTimeIntervale时间表不起作用......
sgm*_*ore 48
您没有指定默认为1分钟的间隔,因此它假定您希望每分钟运行一次作业.
尝试
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule
(s =>
s.WithIntervalInHours(24)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 0))
)
.Build();
Run Code Online (Sandbox Code Playgroud)
默认应该是每天运行,因此不需要OnEveryDay().
不确定为什么你看到本地和UTC,因为我的所有时间都以UTC显示.
Jür*_*ock 16
虽然WithIntervalInHours可能会解决这个问题而且一个类似cron的计划更灵活,但我想分享另一个解决方案:EndingDailyAfterCount(...)
var trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(s => s
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 00)))
.EndingDailyAfterCount(1))
.Build();
Run Code Online (Sandbox Code Playgroud)