現在、Quartz.Net Scheduler を使用してさまざまなジョブをスケジュールしています。UI で、ユーザーはジョブをトリガーする頻度 (毎週、曜日、時間) を構成できます。ユーザーがこれらのプロパティを構成できるようになると、現在次のトリガー時間が表示されます。
例: 毎週日曜日の午前 2 時 CronString: 0 0 2 ? * SUN * 現在の日付: 2013 年 3 月 8 日金曜日 タイムゾーン: EST UTC-5.30 次のトリガー時間: 2013 年 3 月 10 日日曜日 2:00 AM
これはうまく機能しています。ただし、DST が 2 月 10 日に開始する場合、その日の午前 2:00 はありません。したがって、CronExpression は次のエラーをスローします。
CronExpression exp = new CronExpression(cronStr);
var dt = exp.GetNextValidTimeAfter(DateTime.Now.ToUniversalTime()).Value.ToLocalTime();
return String.Format("{0:dddd, MMMM d, yyyy}", dt);
例外: ArgumentException がスローされました。メッセージ: 「指定された DateTime は無効な時刻を表しています。」
カレンダーにはそのような日時が存在しないため、その日をスキップして、次の有効な日付、つまり 2013 年 3 月 17 日日曜日 2:00 AM を表示します。
これは、Quartz コードの .Net CLR によって内部的にスローされるため、どうすれば修正できますか。