C# Net如何创建每天不增加1分钟的日程安排

C# Net如何创建每天不增加1分钟的日程安排,c#,scheduling,intervals,quartz.net,quartz.net-2.0,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 = Trigge

我试图在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);
这是在新西兰夏令时执行的(因此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
第一个日期/时间使用本地时区显示,其余日期/时间使用UTC显示,每个时间值递增1分钟,并且日期从不更改

我觉得我可能错过了一些基本的日常时间间隔安排,但我只是不知道它是什么

编辑

作为对此的更新,我现在切换到使用基于CRON表达式的触发器:

TriggerBuilder.Create()
  .WithCronSchedule(string.Format("0 {0} {1} ? * *", 0, 13))
  .Build();
它给了我预期的结果:

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

但是我仍然想知道为什么DailyTimeIntervale计划不起作用…

您没有指定默认为1分钟的间隔,因此它假设您希望每分钟运行一次作业

试一试

 ITrigger trigger = TriggerBuilder.Create()
    .WithDailyTimeIntervalSchedule
      (s => 
         s.WithIntervalInHours(24)
        .OnEveryDay()
        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 0))
      )
    .Build();
默认情况下应该每天运行,因此实际上不需要OnEveryDay()


我不知道为什么会看到本地和UTC,因为我的所有时间都是以UTC显示的。

虽然
使用IntervalinHours
可能会解决这个问题,而且类似cron的时间表更灵活,但我想分享另一个解决方案:
EndingDailyAfterCount(…)


TriggerUtils.ComputeFireTimes——太棒了!白天会不会有什么问题?(见)关于这一点,我还有更多的问题,如果我想每天早上12点和下午12点开始两次,我该怎么做?@Nguyễ恩胡伊。我猜
ITrigger trigger=TriggerBuilder.Create().WithDailyTimeIntervalsSchedule(s=>s.WithIntervalInHours(12)).Build()或<代码>ITrigger trigger=TriggerBuilder.Create().WithDailyTimeIntervalsSchedule(s=>s.WithIntervalInHours(12).OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0,0)).Build()@sgmoore:我给了一个时间作为例子,所以也许你误解了我的意思,我的意思是如何设置每天的多个时间。例如:凌晨2点;凌晨3点;早上5点。这些时间已经不一样了。刚刚给我自己发了14600封电子邮件该死的。很好。。。这也以一种非常优雅的方式解决了DST问题@AndreasNiedermair很高兴我能帮上忙,就我个人所知:quartz.net的cron-like时间表是否有任何dst问题?啊,据我所知:内部时间存储在UTC中,因此与dst完全无关-可能您必须在dst更改后重新安排作业,以反映相关UTC时间戳的更改。。。(但我不知道在添加cron表达式时会添加哪些extend-futurewise-triggers,或者它们是否会被动态计算)EndingDailyAfterCount的含义是什么?@Mou这将在x运行后每天停止计划。如果要将作业安排为从上午8点到晚上8点每小时运行一次,可以使用
OnEveryDay().StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8,0)).WithIntervalInHours(1).EndingDailyAfter(12)
var trigger = TriggerBuilder.Create()
  .WithDailyTimeIntervalSchedule(s => s
      .OnEveryDay()
      .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 00)))
      .EndingDailyAfterCount(1))
.Build();