You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Quartz调度器中配置C#任务于8:45-17:15每3分钟执行?

解决Quartz.NET中8:45至17:15每3分钟执行任务的Cron表达式问题

Hey there! 刚好帮你梳理出了精准的解决方案,毕竟我之前也在Quartz.NET里折腾过类似的定时任务配置😉

要实现8:45到17:15期间每3分钟执行一次的需求,直接写单个Cron表达式容易出现逻辑冲突(比如会包含8点前45分钟的无效执行时间),所以最清晰准确的方式是拆分三个触发器,分别覆盖三个时间段:

对应的Cron表达式及说明

我把每个时间段的表达式和含义都列出来:

1. 8:45 - 8:57 每3分钟执行

0 45/3 8 * * ?
  • 秒位设为0(确保整分钟执行)
  • 分位45/3:从45分开始,每3分钟触发一次(对应45、48、51、54、57分)
  • 时位固定为8,仅在8点生效

2. 9:00 - 16:57 每3分钟执行

0 0/3 9-16 * * ?
  • 分位0/3:从0分开始,每3分钟触发一次
  • 时位9-16:覆盖9点到16点的所有整点时段

3. 17:00 - 17:15 每3分钟执行

0 0-15/3 17 * * ?
  • 分位0-15/3:在0到15分之间,每3分钟触发一次(对应0、3、6、9、12、15分)
  • 时位固定为17,仅在17点生效

C#代码配置示例

下面是在Quartz.NET中绑定Job和这三个触发器的代码片段(以3.x版本为例):

// 假设你已经定义了自己的Job类,比如MyScheduledJob
var job = JobBuilder.Create<MyScheduledJob>()
    .WithIdentity("TimeRangeJob", "TaskGroup")
    .Build();

// 创建三个触发器
var morningTrigger = TriggerBuilder.Create()
    .WithIdentity("MorningTrigger", "TaskGroup")
    .WithCronSchedule("0 45/3 8 * * ?")
    .Build();

var middayTrigger = TriggerBuilder.Create()
    .WithIdentity("MiddayTrigger", "TaskGroup")
    .WithCronSchedule("0 0/3 9-16 * * ?")
    .Build();

var afternoonTrigger = TriggerBuilder.Create()
    .WithIdentity("AfternoonTrigger", "TaskGroup")
    .WithCronSchedule("0 0-15/3 17 * * ?")
    .Build();

// 绑定到调度器并启动
var scheduler = await StdSchedulerFactory.GetDefaultScheduler();
await scheduler.Start();
await scheduler.ScheduleJob(job, new List<ITrigger> { morningTrigger, middayTrigger, afternoonTrigger }, true);

额外注意事项

  • 如果需要仅在工作日执行,可以在每个表达式的最后加上MON-FRI,比如0 45/3 8 * * MON-FRI
  • 确认你的Quartz.NET版本,上面的表达式在3.x及以上版本都能正常解析
  • 测试时可以用Quartz自带的Cron表达式验证逻辑(或者本地调试),确保触发时间符合预期

内容的提问来源于stack exchange,提问作者user9613901

火山引擎 最新活动