gpt4 book ai didi

c# - Quartz.net 在 UTC 时间创建每日计划

转载 作者:太空狗 更新时间:2023-10-29 20:52:57 25 4
gpt4 key购买 nike

我想在世界标准时间每天早上 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com