単一のイベントを持つ 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 に組み込まれているパーサーを検討することができますが、もっと簡単な方法を望んでいます!)。
バックグラウンド
参考までに、iCalendar ファイルを使用して起動するタイミングを決定するQuartz.NETトリガーを構築することを目指しています。