Reputation: 375
I am using Quartz.NET library and I need to execute a job every two days and repeat it every two hours between 22 PM and 6 AM. I don't know how to achieve this. I tried all of triggers combining them with calendars to exclude other hours, but nothing works as I want. Any idea?
Upvotes: 0
Views: 309
Reputation: 872
This is the answer.
protected void Application_Start()
{
//....
EveryTwoWeek();
//....
}
private void MainJob()
{
int hourNumber = 2;
var schedFact = new Quartz.Impl.StdSchedulerFactory();
var sched = schedFact.GetScheduler();
sched.Start();
var twoHourlyTriggerFrom22To6 = Quartz.TriggerUtils.MakeHourlyTrigger(hourNumber);
twoHourlyTriggerFrom22To6.StartTimeUtc = System.DateTime.Now.Date.AddHours(22);
twoHourlyTriggerFrom22To6.EndTimeUtc = System.DateTime.Now.Date.AddHours(22 + 8);
var jobDetail = new Quartz.JobDetail("Method", methodType);
sched.ScheduleJob(jobDetail, twoHourlyTriggerFrom22To6);
}
private void EveryTwoDays()
{
int dayNumber = 2;
var schedFact = new Quartz.Impl.StdSchedulerFactory();
var sched = schedFact.GetScheduler();
sched.Start();
var everyTwoDaysTrigger = Quartz.TriggerUtils.MakeImmediateTrigger(int.MaxValue, new System.TimeSpan(0, dayNumber * 24, 0, 0));
everyTwoDaysTrigger.StartTimeUtc = System.DateTime.Now.Date;
var jobDetail = new Quartz.JobDetail("MainJob", mainJobType);
sched.ScheduleJob(jobDetail, everyTwoDaysTrigger);
}
Upvotes: 2
Reputation: 16077
What about 0 0 0,2,4,6,22 1/2 * ? *
Strictly speaking, this isn't every two days, but on the 1st, 3rd, 5th etc of each month.
Upvotes: 0