Я провел несколько тестов. Вот мой код:Библиотека DDay Ical правильно вычисляет повторяющиеся правила?
var systemTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var icalTimeZone = iCalTimeZone.FromSystemTimeZone(systemTimeZone);
var startTimeSearch = new DateTime(2015, 9, 8, 0, 0, 0, DateTimeKind.Utc);
var endTimeSearch = new DateTime(2015, 12, 1, 00, 0, 0, DateTimeKind.Utc);
var iCalendar = new iCalendar();
var pacificTimeZone = _iCalendar.AddTimeZone(icalTimeZone);
var event = new Event
{
Summary = "This is an event at 2015-09-08 10:30 PST (2015-09-08 17:30 UTC)",
DTStart = new iCalDateTime(2015, 9, 8, 10, 30, 0, pacificTimeZone.TZID, iCalendar),
Duration = new TimeSpan(0, 1, 0, 0)
};
var rp = new RecurrencePattern("FREQ=WEEKLY;UNTIL=20151112T080000Z;WKST=SU;BYDAY=TU");
event.RecurrenceRules.Add(rp);
iCalendar.Events.Add(_event);
var occurrences = iCalendar.GetOccurrences(startTimeSearch, endTimeSearch);
Вот результат:
10 вхождений - вот Period.StartTime.Value и UTC Пропертис вхождений
Значение - 9/8/2015 10:30:00 - UTC 9/8/2015 17:30:00
Ценность - 15/15/2015 10:30:00 - UTC 9/15/2015 17:30:00
Значение - 9/22/2015 10:30:00 - UTC 9/22/2015 17:30:00
Значение - 9/29/2015 10:30:00 - UTC 9/29/2015 17:30:00
Значение - 10/6/2015 10:30:00 - UTC 10/6/2015 17: 30:00
Ценность - 10/13/2015 10:30:00 - UTC 10.10.2015 17:30:00
Значение - 10/20/2015 10:30:00 - UTC 10/20/2015 17:30:00
Значение - 10/27/2015 10:30: 00 - UTC 10/27/2015 17:30:00
Значение -11/3/2015 10:30:00 - UTC 11/3/2015 17:30:00 (это должно быть 18:30:00!)
Ценность - 11/10/2015 10:30:00 - UTC 11/10/2015 17:30:00 (ЭТО ДОЛЖНО БЫТЬ 18:30:00!)
Как вы можете видеть, последние два должны иметь время UTC в 18:30 : 00. Поэтому я задаюсь вопросом, работает ли это так, как работает DDay Ical, и я не должен рассчитывать на то, что он получит UTC datetime правильно, или если я что-то делаю неправильно.
Может ли это иметь какое-то отношение к летнему сбережению? – Thorarins