Предположим, у меня есть iCalendar с одним событием. У этого есть правило повторения (RRULE), установленное с COUNT
, чтобы ограничить его, но также имеет некоторые даты исключения и некоторые правила исключения.Найти последнее вхождение события в DDay.iCal
Я хочу рассчитать дату последняя возникновение.
Если бы у правил было только UNTIL
, это было бы легко, поскольку я знал бы, что это ограничило возможные даты, поэтому я мог бы сделать следующее.
IICalendar calendar = LoadCalendar();
Event evt = calendar.Events.Single();
DateTime start = evt.Start;
DateTime end = evt.RecurrenceRules.Select(r => r.Until).Max();
var lastOccurrence = evt.GetOccurrences(start, end).Last();
Однако этот подход не будет работать с COUNT, так как исключения могут подтолкнуть последнее вхождение бесконечно в будущем (например, предположим, первые 500 даты еженедельного появления были исключены - это подтолкнет конец дата около 10 лет в будущее).
Есть ли простой способ определить последнее событие в этом сценарии? (В конечном счете, я мог бы написать собственный собственный парсер правил или подумать о том, что было встроено в DDay, но я надеюсь на более простой способ!).
фон
Для справки, я стремлюсь построить Quartz.NET Trigger, которая использует файл, чтобы определить Анонсы, когда огонь.
Спасибо, что указали на устаревание EXRULE - мы сами их не используем, но приятно знать, что я могу их игнорировать. Из вашего ответа, похоже, мне придется написать приличный кусок кода, но это нормально - я просто надеялся найти, что пропустил метод в DDay API :) –