8

問題は、MS Outlook カレンダーの動作から来ています。

「毎週月曜日」と「奇数日ごと」という 2 つの定期的なイベント (今日から開始) があるとします。交点をチェックしたり、各日付をブルートフォースすることなくアルゴリズム的に最初の交点を見つける方法はありますか?

定義は、CRON の表記法または ICal 表記法で行うことができます。関係ないと思います。

グレゴリオ暦でこれに対する解決策はありますか?

UPD : MS Outlook Calendar がこれらのイベントをどのように処理するかを知ることも興味深いです。つまり、それがその元をどのように発見するかを意味します。今日は2つのイベント?具体的な日付が定期的なイベントの定義に合っているかどうかを判断するためのテクニックでもあるはずです。

正式には、2 つの関数のアルゴリズムとして記述できます。

Date:intersection(Event e1, Event e2)
boolean:contains(Date date, Event ev)

制限に関しては、イベント定義の表記から行くことができます。Outlook (または iCal) では、複雑な種類の定期的なイベントを定義できないことがわかります。

4

2 に答える 2

1

異なる再発からのイベントが同じ日にいつ発生するかだけを心配している場合は、次のことができます。

  • 最近の任意の日を1日目として設定します。
  • 各再発を、イベントと開始日の間の「日数」として表現します。イベントが毎週月曜日と毎週木曜日に発生する場合は、これを2回の繰り返しと2つの開始日として表現します。
  • 適切なモジュラー演算を使用して、さまざまな繰り返しからのイベントが衝突する日を見つけます。

たとえば、「毎週月曜日」と「5日目」の両方の再発が1日目に衝突した場合、次に36日、71日、106日などに衝突します。

より正確なものが必要な場合は、丸一日ではなく、興味のある1日の何分の1かで測定する必要があります。

于 2010-05-25T12:03:49.450 に答える
1

最初の繰り返しの期間は 14 日であるため、その日のパリティ (奇数または偶数) は、月が奇数で終わる場合にのみ変更されます: 1 月、うるう 2 月、3 月、5 月、7 月、8 月、10 月、12 月。月は変わりません。

于 2010-05-25T11:48:29.383 に答える