在X和Y小时之间每N周执行一次工作

时间:2013-01-07 09:16:35

标签: triggers cron quartz-scheduler quartz.net

我正在使用Quartz.NET库,我需要每两天执行一次作业,并在下午22点到早上6点之间每两小时重复一次。我不知道如何实现这一目标。我尝试了所有触发器将它们与日历结合起来以排除其他时间,但没有任何效果,因为我想要。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

这就是答案。

        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);
        }

答案 1 :(得分:0)

0 0 0,2,4,6,22 1/2 *怎么样? *

严格来说,这不是每两天一次,而是每个月的第1天,第3天,第5天等。