我是一个石英新手。
我只是试图找出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/ ...
备份的谢谢!
答案 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