假设我有一个带有单个事件的 iCalendar。这有一个重复规则 (RRULE) 设置COUNT
为限制它,但也有一些例外日期和一些例外规则。
我想计算最后一次发生的日期。
如果规则只UNTIL
设置了 s,这将很容易,因为我知道这限制了可能的日期,所以我可以执行以下操作。
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触发器,它使用 iCalendar 文件来确定何时触发。