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

标签 c# .net quartz.net

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

相关文章:

c# - Azure blob 存储 - 获取 block 列表以错误的顺序返回未提交的 block

c# - BigInteger 双基数幂计算 C#

python - 如何将指向 Python cffi 结构的指针转换为 System.IntPtr (.NET)?

c# - quartz 调度器 : How to pass custom objects as JobParameter?

c# - 如何在 C# 中使用 webclient UploadFile、UploadValues 上传多个文件?

c# - 在 C# 中添加一个 long 和 ulong

c# - 如何使用 C# 从包含大量其他文件或文件夹的文件夹中正确删除 .Net Core 中的文件

c# - MVVM 和 Caliburn : Replacing All Screens?

C#帮助使用 quartz 实时配置间隔

asp.net - Quartz.net 和 Ninject : how to bind implementation to my job using NInject