2014-09-29 128 views
0

我想安排Quartz.Net在每个特定时间的某个工作日运行。时间表应该永远运行。Quartz.Net在特定时间在特定日期触发

例如:

  • 周一@ 12:00
  • 周四@ 12:00
  • 周六@ 12:00

我有以下的配置,但它不荣誉时间,每次制作都是00:00,尽管是在正确的日子。

DateTimeOffset off = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 12, 0, 0, DateTimeKind.Utc); 

var trigger = TriggerBuilder.Create(). 
    WithIdentity("Test"). 
    WithDailyTimeIntervalSchedule(x => 
     x.InTimeZone(TimeZoneInfo.Utc). 
     WithIntervalInHours(24). 
     OnDaysOfTheWeek(process.RunAtDays)). 
    StartAt(off). 
    Build(); 

从这个输出看起来像:

  • 2014年1月10日@ 00:00
  • 2014年8月10日@ 00:00
  • 15/10/2014 @ 00:00

我已经尝试过各种组合,目前为止没有运气让这个工作成功。

相信相当于cron配置为:

"0 00 12 ? * MON,THU,SAT" 

但我需要的值由最终用户可配置的。

回答

1

在玩了好几个小时的价值观后,我相信我有合适的组合来完成任务。我需要设置StartingDailyAt()是我想重复的时间。完成的代码如下所示:

DateTimeOffset off = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day, 12, 0, 0, DateTimeKind.Utc); 

var trigger = TriggerBuilder.Create(). 
    WithIdentity("Test"). 
    WithDailyTimeIntervalSchedule(x => 
     x.InTimeZone(TimeZoneInfo.Utc). 
     WithIntervalInHours(24). 
     OnDaysOfTheWeek(process.RunAtDays). 
     StartingDailyAt(TimeOfDay.HourMinuteAndSecondOfDay(12, 0, 0))). 
    StartAt(off). 
    Build();