Vb.net 根据Quartz中的开始时间按时间间隔安排任务

Vb.net 根据Quartz中的开始时间按时间间隔安排任务,vb.net,quartz.net,Vb.net,Quartz.net,我是Quartz的新手,希望使用它为使用SQLServerExpress的客户端使用服务来调度SQLServer中的脚本 我需要一个用户能够安排一个任务运行,比如说从一个特定的日期开始每两周运行一次。例如:开始日期=2013年1月1日下午12:00(星期二),每14天重复一次 在作业的设置中,有StartTime(日期时间)、IntervalUnit(秒、分钟、小时、天、周、年)和RepeatsEvery(在开始日期之后触发的间隔数) 例如:StartDate=“1/JAN/2013 12:00

我是Quartz的新手,希望使用它为使用SQLServerExpress的客户端使用服务来调度SQLServer中的脚本

我需要一个用户能够安排一个任务运行,比如说从一个特定的日期开始每两周运行一次。例如:开始日期=2013年1月1日下午12:00(星期二),每14天重复一次

在作业的设置中,有StartTime(日期时间)、IntervalUnit(秒、分钟、小时、天、周、年)和RepeatsEvery(在开始日期之后触发的间隔数)

例如:StartDate=“1/JAN/2013 12:00PM”和IntervalUnit=“DAY”以及RepeatsEvery=14的设置将在每2个星期二下午12:00PM解雇该作业。如果开始日期已过,我需要在下一个开始日期启动作业,例如:如果我今天(2013年1月18日)开始服务,下一个开始日期将是2013年1月29日下午12:00

我不知道如何在石英中使用日历触发器来实现这一点。这是石英内置的还是我需要在启动时计算新的启动时间

假设我必须计算一个新的开始时间,是否有任何内置函数或简洁的快捷方式,或者我是否需要为每个IntervalUnit使用类似的函数:

'Days
Dim diff As Integer
diff = Now.Subtract(.StartTime).TotalDays
Dim offset As Integer
offset = .RepeatsEvery - (diff Mod .RepeatsEvery)
offset = Now.AddDays(offset).Subtract(.StartTime).TotalDays 'Get the days from Start t preserve time of day
Start = .StartTime.AddDays(offset)

您可以创建一个触发器,然后调用trigger.GetFireTimeAfter(DateTime.Now)来计算新的开始日期,然后使用新的StartDate生成和新触发器

下面是C#,希望能给你一个想法

var trigger = TriggerBuilder.Create()
                   .StartAt( new DateTimeOffset(new DateTime(2013,1,1)))
                   .WithSimpleSchedule(x=>x.RepeatForever()
                                          .WithInterval(new TimeSpan(14,0,0,0)))
                    .Build();                


var newStartingPoint = trigger.GetFireTimeAfter(DateTime.Now);

if (newStartingPoint.HasValue)  
{ 
     trigger = ((ISimpleTrigger) trigger).GetTriggerBuilder()
                                        .StartAt(newStartingPoint.Value)
                                        .Build();    
}
.GetTriggerBuilder()在ITrigger上不可用,这就是为什么必须将触发器强制转换为ISimpleTrigger,但相同的原则适用于其他触发器