Quartz.net CRON表达式总是返回月份的最后一天?

时间:2012-08-29 00:45:11

标签: quartz.net cronexpression

我是一个石英新手。

我只是试图找出Quartz.net是否可以,给定开始日期(可能在过去),结束日期和间隔计算正确的日期出现 - 它可能不是Quartz的主要用例但它似乎可以从我发现的API中找到。

所以给出了这个片段:

var exp = new CronExpression(“0 0 0 1/7 *?*”);

    var next = exp.GetNextValidTimeAfter(new DateTime(2012, 1, 1, 12, 30, 00).ToUniversalTime());
    while (next < DateTime.Parse("30 Oct 2012"))
    {
        next = exp.GetNextValidTimeAfter(next.Value);
        System.Diagnostics.Debug.WriteLine(next);
    }

结果似乎是(截断的):

14/01/2012 11:00:00 am.00:00

21/01/2012 11:00:00 am.00:00

28/01/2012 11:00:00 am.00:00

31/01/2012 11:00:00 am.00:00

7/02/2012 11:00:00 am.00:00

14/02/2012 11:00:00 am.00:00

21/02/2012 11:00:00 am.00:00

28/02/2012 11:00:00 am.00:00

29/02/2012 11:00:00 am.00:00

7/03/2012 11:00:00 am.00:00

Errr ......似乎Quartz的CRON表达式总是包含一个月的最后一天,并且基本上计算下一个日期?或者我对石英/ cron的期望/理解是错误的?

此外,这些结果似乎也是使用http://www.cronmaker.com/ ...

备份的

谢谢!

1 个答案:

答案 0 :(得分:1)

我不认为你用cron表达式无法实现你想要的东西。

如果你下载并使用Quartz.Net 2.x,你可以使用一种名为CalendarIntervalTrigger的新型触发器,它可以用来管理不同的间隔单元。

我已经测试了这段代码,它的工作方式与预期相符:

DateTimeOffset startCalendar = DateBuilder.DateOf(11, 0, 0, 14, 1, 2012);

var weeklyTrigger = new CalendarIntervalTriggerImpl
{
    StartTimeUtc = startCalendar,
    RepeatIntervalUnit = IntervalUnit.Week,
    RepeatInterval = 1  // every one week;
};

IList<DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(weeklyTrigger, null, 10);

foreach (var item in fireTimes)
{
    Console.WriteLine(item);
}
Console.ReadLine();

结果:

  

14/01/2012 11:00:00 +00:00
  21/01/2012 11:00:00 +00:00
  28/01/2012 11:00:00 +00:00
  04/02/2012 11:00:00 +00:00
  11/02/2012 11:00:00 +00:00
  18/02/2012 11:00:00 +00:00
  25/02/2012 11:00:00 +00:00
  03/03/2012 11:00:00 +00:00
  10/03/2012 11:00:00 +00:00
  17/03/2012 11:00:00 +00:00