此問題與this one有關,但保持更一般化,可以單獨處理。Quartz.NET - 這個單元測試不應該通過嗎?
編輯:石英版本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等於或我的做法有缺陷?
這通過對我很好(我不是在你的TZ),如果我只是創建開始一個新的'DaylightTime'對象和結束日期,您已經詳細(例如'daylightChange = new DaylightTime(新的DateTime(2013,3,31,2,0,0),新的DateTime(2013,10,27,2,0,0),TimeSpan.MinValue)')它也通過。 –
謝謝,這鼓勵我再看看更新的Quartz版本。我已經檢查了網站上的更改日誌,但沒有提及相關的修補程序。但是,當我查看存儲庫中的提交時,我注意到實際上有一個這樣的修復。我將添加一個具有詳細信息的答案。 –
我試着用2.1.2.400,FWIW –