Quartz.NET - Sollte dieser Komponententest nicht bestehen?
Diese Frage bezieht sich aufdieses, wird aber allgemeiner gehalten und kann unabhängig behandelt werden.
BEARBEITEN: Quartz-Version ist v2.0.1
Nach meinem Verständnis sollte der folgende Komponententest bestehen:
[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);
}
Allerdings (wie Sie sehen können), dienextValidTimeFromBefore
unterscheidet sich vonnextValidTimeFromAfter
. Das Ergebnis innextValidTimeFromAfter
ist richtig. Die UTC 12:00 führt im Sommer zu 14:00 Uhr (was bereits zu diesem Zeitpunkt begonnen hat). Es sollte egal sein, ob dieGetNextValidTimeAfter()
Parameter gibt eine Zeit innerhalb oder außerhalb der Sommerzeit an.
Sollten die NextValidTimes gleich sein oder ist mein Ansatz fehlerhaft?