【发布时间】:2013-08-13 12:57:31
【问题描述】:
假设我有一个包含单个事件的 iCalendar。这有一个使用COUNT 设置的重复规则 (RRULE) 来限制它,但也有一些例外日期和一些例外规则。
我想计算上次发生的日期。
如果规则只设置了UNTILs,这将很容易,因为我知道这限制了可能的日期,所以我可以执行以下操作。
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,它使用 iCalendar 文件来确定何时触发。
【问题讨论】: