【问题标题】:Quartz.NET Daily Time Interval across midnight跨午夜的 Quartz.NET 每日时间间隔
【发布时间】:2015-08-12 07:16:06
【问题描述】:

我的域模型中有以下用于计划任务的配置设置,我正在尝试使用 Quartz.NET 2.3.3 创建触发器。

  1. 开始时间TimeSpan
  2. 结束时间TimeSpan
  3. 重复间隔TimeSpan
  4. 工作日启用DayOfWeek[]

我可以使用此信息成功创建每日时间间隔触发器。

var trigger = TriggerBuilder
    .Create()
    .WithDailyTimeIntervalSchedule(c => c
        .StartingDailyAt(scheduledTask.StartTime.ToTimeOfDay())
        .EndingDailyAt(scheduledTask.EndTime?.ToTimeOfDay())
        .OnDaysOfTheWeek(scheduledTask.WeekdaysEnabled.ToDaysOfWeek().ToArray())
        .WithIntervalInSeconds((int)scheduledTask.RepeatInterval.TotalSeconds)
        .InTimeZone(timeZoneInfo))
    .Build();

但是,我配置的 EndTime 可能在 StartTime之前。例如,22:30 到 04:00(从晚上 10:30 运行到第二天凌晨 4:00,以指定的时间间隔重复,跨越午夜边界)。每日时间间隔时间表似乎不支持这一点。它只会在开始时触发一次,并且永远不会再次触发。

我尝试过使用CronTrigger,因为它可以跨越午夜边界,但这不能正确支持一天中的开始/结束时间(例如,0 30-0/30 22-4 ? * * 从晚上 10:00 到每 30 分钟运行一次凌晨 4:30。

有没有办法在 Quartz.NET 中创建这个时间表?

【问题讨论】:

    标签: c# quartz.net


    【解决方案1】:

    我能够通过创建两个每日时间间隔触发器来解决这个问题。一个触发器的开始时间为晚上 10:30,没有结束时间(一直运行到一天结束)。另一个触发器没有开始时间,但结束时间是凌晨 4:00。

    使用这两个触发器调度作业会产生所需的触发时间。

    1/01/2015 10:30:00 PM
    1/01/2015 11:00:00 PM
    1/01/2015 11:30:00 PM
    2/01/2015 12:00:00 AM
    2/01/2015 12:30:00 AM
    2/01/2015 1:00:00 AM
    2/01/2015 1:30:00 AM
    2/01/2015 2:00:00 AM
    2/01/2015 2:30:00 AM
    2/01/2015 3:00:00 AM
    2/01/2015 3:30:00 AM
    2/01/2015 4:00:00 AM
    2/01/2015 10:30:00 PM
    2/01/2015 11:00:00 PM
    2/01/2015 11:30:00 PM
    3/01/2015 12:00:00 AM
    3/01/2015 12:30:00 AM
    3/01/2015 1:00:00 AM
    3/01/2015 1:30:00 AM
    3/01/2015 2:00:00 AM
    3/01/2015 2:30:00 AM
    3/01/2015 3:00:00 AM
    3/01/2015 3:30:00 AM
    3/01/2015 4:00:00 AM
    

    【讨论】:

      猜你喜欢
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多