Câu hỏi này có liên quan đến this one, nhưng được giữ tổng quát hơn và có thể được xử lý độc lập.Quartz.NET - Không nên vượt qua bài kiểm tra đơn vị này?
EDIT: Quartz phiên bản v2.0.1
Từ sự hiểu biết của tôi, kiểm tra đơn vị sau đây cần pass:
[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);
}
Tuy nhiên (như bạn có thể nhìn thấy), các nextValidTimeFromBefore
khác với nextValidTimeFromAfter
. Kết quả trong nextValidTimeFromAfter
là chính xác. Các UTC 12:00 sẽ dẫn đến 14:00 trong mùa hè (đã bắt đầu tại thời điểm đó). Không quan trọng nếu tham số GetNextValidTimeAfter()
chỉ định thời gian bên trong hoặc bên ngoài khoảng thời gian mùa hè.
Nếu NextValidTimes bằng hoặc phương pháp tiếp cận của tôi có thiếu sót không?
Điều này sẽ tốt cho tôi (tôi không nằm trong TZ) và nếu tôi chỉ tạo đối tượng 'DaylightTime' mới có ngày bắt đầu và ngày kết thúc bạn đã chi tiết (ví dụ: 'daylightChange = new DaylightTime (new DateTime (2013, 3, 31, 2, 0, 0), DateTime mới (2013, 10, 27, 2, 0, 0), TimeSpan.MinValue)') nó cũng đi qua. –
Cảm ơn, điều này đã khuyến khích tôi xem xét các phiên bản Quartz mới hơn. Tôi đã kiểm tra nhật ký thay đổi trên trang web, điều này không đề cập đến bản sửa lỗi có liên quan. Tuy nhiên, khi tôi nhìn qua các cam kết trong kho tôi nhận thấy có thực sự là một sửa chữa cho việc này. Tôi sẽ thêm một câu trả lời với thông tin chi tiết. –
Tôi đã thử điều này với 2.1.2.400, FWIW –