Подтвердить что ты не робот

Quartz.Net как создать ежедневный график, который не получает 1 минуту в день

Я пытаюсь создать повторяющийся ежедневный график в Quartz.Net, но имею несколько проблем:

Во-первых, я строю ежедневный график, повторяющийся в 12:45 Использование кода Quartz.Net:

var trigger = TriggerBuilder.Create()
  .WithDailyTimeIntervalSchedule(s => 
      s.OnEveryDay().StartingDailyAt(new TimeOfDay(13, 00)))
.Build();

var times = TriggerUtils.ComputeFireTimes(trigger as IOperableTrigger, null, 10);

foreach (var time in times) Console.WriteLine(time);

Это выполняется в Новой Зеландии, DST (так UTC + 13: 00)

И результат, который я получаю, довольно странный:

5/10/2012 1:00:00 p.m. +13:00
5/10/2012 12:01:00 a.m. +00:00
5/10/2012 12:02:00 a.m. +00:00
5/10/2012 12:03:00 a.m. +00:00
5/10/2012 12:04:00 a.m. +00:00
5/10/2012 12:05:00 a.m. +00:00
5/10/2012 12:06:00 a.m. +00:00
5/10/2012 12:07:00 a.m. +00:00
5/10/2012 12:08:00 a.m. +00:00
5/10/2012 12:09:00 a.m. +00:00

Первая дата/время отображается с использованием локального часового пояса, остальные отображаются в формате UTC, а каждое значение времени увеличивается на 1 минуту, а дата никогда не изменяется.

Я чувствую, что, возможно, мне не хватает чего-то фундаментального здесь с ежедневным расписанием, но я просто не знаю, что это такое?

Edit

Как обновление для этого, я теперь переключился на использование триггера на основе выражения CRON:

TriggerBuilder.Create()
  .WithCronSchedule(string.Format("0 {0} {1} ? * *", 0, 13))
  .Build();

И он дал мне результаты, которые я ожидал бы:

5/10/2012 12:00:00 a.m. +00:00
6/10/2012 12:00:00 a.m. +00:00
7/10/2012 12:00:00 a.m. +00:00
8/10/2012 12:00:00 a.m. +00:00
9/10/2012 12:00:00 a.m. +00:00
10/10/2012 12:00:00 a.m. +00:00
11/10/2012 12:00:00 a.m. +00:00
12/10/2012 12:00:00 a.m. +00:00
13/10/2012 12:00:00 a.m. +00:00
14/10/2012 12:00:00 a.m. +00:00

Но мне все равно хотелось бы знать, почему расписание DailyTimeIntervale не работает...

4b9b3361

Ответ 1

Вы не указываете интервал, который по умолчанию имеет значение 1 минута, поэтому предполагается, что вы хотите запускать задание каждую минуту.

Попробуйте

 ITrigger trigger = TriggerBuilder.Create()
    .WithDailyTimeIntervalSchedule
      (s => 
         s.WithIntervalInHours(24)
        .OnEveryDay()
        .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 0))
      )
    .Build();

По умолчанию должно выполняться каждый день, поэтому OnEveryDay() не требуется.

Не знаете, почему вы видите локальный и UTC, поскольку все мои времена отображаются в формате UTC.

Ответ 2

Хотя WithIntervalInHours, вероятно, решит это, и график, похожий на cron, еще более гибкий, я хочу поделиться другим решением: EndingDailyAfterCount(...)

var trigger = TriggerBuilder.Create()
  .WithDailyTimeIntervalSchedule(s => s
      .OnEveryDay()
      .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(13, 00)))
      .EndingDailyAfterCount(1))
.Build();