3

我对quartz.net 和cron 表达式很陌生,我必须在c# dotnet 应用程序中创建一个quartz.net 调度程序,它应该根据从数据库中获取的值在每月、每周和每天执行。

具有调度详细信息的表。

Id EffectiveDate  StartTime  Frequency  
 1  2012-04-22      20:55      Daily       
 2  2012-04-22      10:12      Weekly     
 3  2012-04-22      17:00      Daily   
 4  2012-04-23      02:15      Monthly   
 5  2012-04-26      18:30      Daily        
 6  2012-04-27      11:45      Weekly

请帮我解决这个问题。

4

1 回答 1

3

@ user1301587,希望你找到了前进的道路,但我注意到你的问题在谷歌上仍然很高,所以我会继续添加一些伪代码来说明我将如何做到这一点:

  1. 从您的数据源中获取时间表(在您的情况下看起来像一个 RDBMS 数据库表)
  2. 遍历计划列表并使用计划构建 CronScheduleBuilder 的实例:

    string cronExpression = string.Format("{0} {1} {2} {3} {4} {5}", secondPart, minutePart, hourPart, dayOfMonthPart, monthPart, dayOfWeekPart );

    IScheduleBuilder scheduleBuilder = CronScheduleBuilder
                    .CronSchedule(cronExpression)
                    .InTimeZone(TimeZoneInfo.Utc);
    

例如 cron 表达式0 26 6 * * ? 每周每天早上 6:26 运行您的工作 我发现的一个问题是,如果您不指定时区,Quartz 将根据您当前的时区应用转换以将指定时间转换为 UTC 时间

现在您可以使用上面构建的时间表构建触发器:

ICronTrigger trigger = (ICronTrigger)TriggerBuilder.Create()
                .WithIdentity("TestTrigger")
                .WithSchedule(scheduleBuilder)
                .Build();

使用THIS站点构建 Quart.Net 风格的表达式

于 2012-11-05T06:36:20.820 回答