Quartz.NET,每x周重复一次

我需要使用Quartz.NET实现以下场景:

每隔n周重复一次:
周日和/或周一,周二,周三,周四,周五,周六……

例如,我可能会选择:星期一和星期四,每两周复发一次,这可能吗?

我认为可行的方法可能是使用Cron Expressions,但到目前为止,我还没有运气“Recur Every X Weeks”

谢谢!

是否运行Quartz.Net 2.0和选项? 它尚未正式发布,但在其中有一种新的触发类型可以解决您的问题。 它被称为日历间隔触发器。 基本上你就像你在问题中描述的那样定义它。 您将间隔设置为2,将间隔单位设置为周,并且每2周触发一次。 我在这里写了一篇描述它的post。 您可以在此处访问源代码文档。

这是我用过的解决方案……

当没有复发时,我使用cron触发器并选择日期并使其每周运行

EG 0 0 * * 1,2,3

当每个选定日都有一次复发时,我会添加一个SimpleTrigger,从开始日期开始,就是星期几,然后我通过乘以7的复发来计算复发。

因此,我每天最终会有一个简单的触发器。

我希望这可以帮助别人!

它是一个Complext触发器,您可以通过3个触发器进行管理;

  1. 触发2周样本cron:“0 0 0 1 *”
  2. 触发2周样本cron:“0 0 0 15 *”
  3. 触发trig选择天样本cron:“0 0 0?* SUN-SAT”

第一个触发器将创建3.第二个触发器将删除3。

祝好运。

不幸的是,Quartz.Net 2未发布,未记录,并引入了重大变化。

就像Aureliano和Bongo所说,触发器的组合可能有所帮助,但我不太了解他们各自的解决方案。

我的解决方案是包装一个CronTrigger并跳过不需要的事件:

var ct = new CronTrigger(); ct.CronExpression = new CronExpression( string.Format("0 {0} {1} ? * {2} *", minuteOfHour, hourOfDay, daysList)); ct = new WeeklyTriggerWrapper(ct, 2); public class WeeklyTriggerWrapper : CronTrigger { public CronTrigger Trigger { get; private set; } public int WeekInterval { get; private set; } public DateTime? LastFireDateTime { get; private set; } public WeeklyTriggerWrapper(CronTrigger trigger, int weekInterval) { Trigger = trigger; WeekInterval = weekInterval; } public override DateTime? ComputeFirstFireTimeUtc(ICalendar cal) { return Trigger.ComputeFirstFireTimeUtc(cal); } public override DateTime? GetFireTimeAfter(DateTime? afterTimeUtc) { var result = Trigger.GetFireTimeAfter(afterTimeUtc); if (result.HasValue) { DateTime reference = StartTimeUtc; if (LastFireDateTime.HasValue && LastFireDateTime.Value > reference) reference = LastFireDateTime.Value; reference = reference.AddDays(7 * WeekInterval); while (result.HasValue && result.Value < reference) result = Trigger.GetFireTimeAfter(result.Value); } LastFireDateTime = result; return result; } // TODO: handle events... }