web-dev-qa-db-ja.com

Quartz.Net 1日1分を獲得しない毎日のスケジュールを作成する方法

Quartz.Netで毎日繰り返しスケジュールを作成しようとしていますが、いくつかの問題があります。

最初に、次のようなQuartz.Netコードを使用して12:45に繰り返す毎日のスケジュールを作成します。

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分ずつ増加し、日付は変更されません。

ここでは、毎日の時間間隔のスケジュールで基本的な何かを見逃しているように感じますが、それが何なのかわかりません。

編集

これを行うための更新として、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スケジュールが機能しない理由を知りたいです...

35
Bittercoder

デフォルトで1分に発生する間隔を指定していないため、毎分ジョブを実行することを想定しています。

試して

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

デフォルトでは毎日実行する必要があるため、OnEveryDay()は実際には必要ありません。

私の時間はすべてUTCで表示されるため、ローカルおよびUTCが表示される理由がわかりません。

48
sgmoore

WithIntervalInHoursはおそらくこれを解決し、cronのようなスケジュールはさらに柔軟ですが、別の解決策を共有したいと思います:EndingDailyAfterCount(...)

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