12

定期的または定期的な日付を格納するための公開されたデータ構造はありますか? 処理できるもの:

  1. ポンプは 5 日ごとにリサイクルする必要があります。
  2. 給料日は、第二金曜日です。
  3. サンクスギビング デーは 10 月の第 2 月曜日 (米国: 11 月の第 4 木曜日) です。
  4. バレンタインデーは毎年2月14日。
  5. 夏至は(通常)毎年 6 月 21 日と 12 月 21 日です。
  6. イースターは、春分の日以降の最初の満月の後の日曜日です (わかりました、これは少しストレッチです)。

の内部cronデータ構造は #1、#4、#5 (2 つのルール)、そしておそらく #2 を処理できると思いますが、私はそれを見ていません。MS Outlook やその他のカレンダーは最初の 5 つを処理できるようですが、そのソース コードは手元にありません。

4

3 に答える 3

6

rubyjavaphppython.netjavaなどのiCalendar実装ライブラリを使用し、特別な日付を計算するためのサポートを追加します。

于 2009-06-17T23:02:18.907 に答える
0

繰り返しを指定する方法にはこれらすべてのバリエーションがあるため、5 つのシナリオすべてに対応するために 1 つのデータ構造の実装を避けたいと思います。

代わりに、各タイプの再発に対処する単純な構造を構築します (以前のプロジェクトでも作成しました)。単一のデータ構造のように感じるようにそれらをすべてまとめることができますが、内部では好きなことを行うことができます。インターフェイスを実装することで、各タイプの繰り返しを同じように扱うことができるので、万能型のデータ構造のように感じました。特定の時間枠内でのすべての再発日を任意のインスタンスに尋ねることができ、それでうまくいきました。

また、特定の実装に落ち着く前に、これらの日付をどのように使用する必要があるかについても知りたいです。

于 2009-06-17T22:57:32.083 に答える
0

実際にデータ構造を作成したい場合は、ハッシュテーブルをお勧めします (休日またはイベントが新しい日付の出現を値として持つキーです)。各出現の多重度がある場合は、その値をハッシュできますリンクされたリストでセクションを見つけます。これにより、すべての出現のリストが得られます (これにより、O(1) で検索と挿入が実行されます)。

于 2009-06-17T23:10:36.100 に答える