我想在世界标准时间每天早上 8 点解雇一份工作。问题是触发器不遵守我告诉它的时间。
我的代码如下:
ITrigger trigger = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(
s => s.WithIntervalInHours(24)
.OnEveryDay()
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8,0)))
.Build();
var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);
foreach (var time in times)
Console.WriteLine(time.UtcDateTime);
输出是:
30/09/2013 10:00:00 PM
1/10/2013 10:00:00 PM
2/10/2013 10:00:00 PM
3/10/2013 10:00:00 PM
4/10/2013 10:00:00 PM
5/10/2013 10:00:00 PM
6/10/2013 9:00:00 PM
7/10/2013 9:00:00 PM
8/10/2013 9:00:00 PM
9/10/2013 9:00:00 PM
6 号的时间发生变化的原因是本周末这里开始夏令时。
如何让它像我告诉的那样在世界标准时间早上 8 点触发?
编辑:这太疯狂了,它甚至用 Cron 计划来做:
ITrigger trigger = TriggerBuilder.Create()
.WithCronSchedule("0 0 8 * * ?")
.Build();
var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);
foreach (var time in times)
Console.WriteLine(time.UtcDateTime);
输出:
30/09/2013 10:00:00 PM
1/10/2013 10:00:00 PM
2/10/2013 10:00:00 PM
3/10/2013 10:00:00 PM
4/10/2013 10:00:00 PM
5/10/2013 9:00:00 PM
6/10/2013 9:00:00 PM
7/10/2013 9:00:00 PM
8/10/2013 9:00:00 PM
9/10/2013 9:00:00 PM
最佳答案
在拉下源代码并深入挖掘之后,我找到了几个解决方案。
我最初找到的解决方案是这样的:
var trigger4 = new DailyTimeIntervalTriggerImpl
{
StartTimeUtc = DateTime.UtcNow,
StartTimeOfDay = new TimeOfDay(8, 0, 0),
RepeatIntervalUnit = IntervalUnit.Hour,
RepeatInterval = 24,
TimeZone = TimeZoneInfo.Utc
};
...这让我调整了我的原始代码:
ITrigger trigger2 = TriggerBuilder.Create()
.WithDailyTimeIntervalSchedule(
s => s.WithIntervalInHours(24)
.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0))
.InTimeZone(TimeZoneInfo.Utc))
.Build();
这两个都给了我我想要的东西。我只是希望这个库有一些像样的文档。
关于c# - Quartz.net 在 UTC 时间创建每日计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19084437/