この質問はこれに関連していますが、より一般的なものであり、個別に扱うことができます。
編集: Quartz のバージョンは v2.0.1 です
私の理解では、次の単体テストに合格する必要があります。
[Test]
public void Test() {
// run every first day of month at 14:00 hours
CronExpression expression = new CronExpression("0 0 14 1 * ?");
// TimeZoneInfo.Local = {(UTC+01:00) Amsterdam, Berlin, Bern, Rom, Stockholm, Wien}
if (!TimeZoneInfo.Local.SupportsDaylightSavingTime) {
return;
}
// get "summertime" period for current timezone
var daylightChange = TimeZone.CurrentTimeZone.GetDaylightChanges(2013);
// -> daylightChange.Start {31.03.2013 02:00:00} System.DateTime
// -> daylightChange.End {27.10.2013 03:00:00} System.DateTime
// get one startpoint before and one after begin of summertime
DateTimeOffset beforeSummertime = daylightChange.Start.ToUniversalTime().AddDays(-1);
DateTimeOffset afterSummertime = daylightChange.Start.ToUniversalTime().AddDays(1);
// -> beforeSummertime {30.03.2013 01:00:00 +00:00} System.DateTimeOffset
// -> afterSummertime {01.04.2013 01:00:00 +00:00} System.DateTimeOffset
DateTimeOffset? nextValidTimeFromBefore = expression.GetNextValidTimeAfter(beforeSummertime);
DateTimeOffset? nextValidTimeFromAfter = expression.GetNextValidTimeAfter(afterSummertime);
// nextValidTimeFromBefore {01.04.2013 13:00:00 +00:00} System.DateTimeOffset?
// nextValidTimeFromAfter {01.04.2013 12:00:00 +00:00} System.DateTimeOffset?
Assert.AreEqual(nextValidTimeFromBefore, nextValidTimeFromAfter);
}
ただし (ご覧のとおり)、 は とはnextValidTimeFromBefore
異なりnextValidTimeFromAfter
ます。の結果nextValidTimeFromAfter
は正しいです。UTC 12:00 は、夏時間の 14:00 になります (この時点ですでに開始されています)。GetNextValidTimeAfter()
パラメーターが夏時間内または夏時間外の時間を指定するかどうかは問題ではありません。
NextValidTimes を等しくする必要がありますか、それとも私のアプローチに欠陥がありますか?