2009-06-17 9 views
10

Gibt es eine veröffentlichte Datenstruktur zum Speichern periodischer oder wiederkehrender Daten? Etwas, das handhaben kann:Was ist eine gute Datenstruktur für periodische oder wiederkehrende Daten?

  1. Die Pumpe muss alle fünf Tage recycelt werden.
  2. Zahltag ist jeden zweiten Freitag.
  3. Erntedankfest ist der zweite Montag im Oktober (USA: der vierte Donnerstag im November).
  4. Valentinstag ist jeden 14. Februar.
  5. Sonnenwende ist (normalerweise) jeden 21. Juni und 21. Dezember.
  6. Ostern ist der Sonntag nach dem ersten Vollmond am oder nach dem Tag der Frühlings-Tagundnachtgleiche (okay, dieser ist ein bisschen eine Strecke).

Ich rechne damit, cron ‚s interne Datenstruktur 1 # verarbeiten kann, # 4, # 5 (zwei Regeln), und vielleicht # 2, aber ich habe nicht einen Blick auf sie habe. MS Outlook und andere Kalender scheinen in der Lage zu sein, die ersten fünf zu behandeln, aber ich habe diesen Quellcode nicht herumliegen.

+0

Dies kann helfen: http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application – molf

+0

Danke. Wenn ich nur nach "wiederkehrenden" statt nach "wiederkehrenden Daten" gesucht hätte, hätte ich eine ganze Reihe von Fragen gefunden. – yukondude

Antwort

6

eine iCalendar Implementierung Bibliothek verwenden, wie diese hier: ruby, java, php, python, .net und java und dann Unterstützung hinzufügen, spezielle Daten für die Berechnung.

+1

Danke. Ich dachte, dass iCalendar wie Overkill zu sein scheint, aber vielleicht ist es doch die einfachste Lösung. – yukondude

0

Mit all diesen Variationen in der Art und Weise, wie Sie die Wiederholung angeben, würde ich mich vor einer einzigen Datenstrukturimplementierung für alle fünf Szenarien scheuen.

Stattdessen würde ich (und habe für ein vorheriges Projekt) einfache Strukturen bauen, die jede Art von Wiederholung adressieren. Man könnte sie alle zusammenpacken, so dass es sich wie eine einzelne Datenstruktur anfühlt, aber unter der Haube könnten sie tun, was sie wollen. Durch die Implementierung einer Schnittstelle war ich in der Lage, jede Art von Wiederholung ähnlich zu behandeln, so dass es sich wie eine Einheitsdatenstruktur anfühlte. Ich könnte jede Instanz nach allen Wiederholungsdaten innerhalb eines bestimmten Zeitrahmens fragen, und das hat den Zweck erfüllt.

Ich möchte auch mehr darüber wissen, wie diese Daten verwendet werden müssen, bevor Sie sich auf eine bestimmte Implementierung festlegen.

+0

Ja, ich würde denken, dass Sie einen Verbund von Datenstrukturen benötigen würden, da die Möglichkeiten, die Wiederholungen auszudrücken, so unterschiedlich sind. Und dann würden Sie eine Schnittstelle wünschen, die Sie abfragen konnten, um zu finden, wenn ein bestimmter Tag oder Tage irgendeinem der Wiederholungen entsprach. Als Antwort auf Ihre Frage werden die Daten verwendet, um Tele/Video/Web-Konferenzen zu buchen, von denen einige mit nationalen Feiertagen zusammenfallen, daher das Geschäft "zweiter Montag im Oktober". – yukondude

0

Wenn Sie eine Datenstruktur erstellen möchten, würde ich eine Hashtabelle empfehlen (wobei die Feiertage oder das Ereignis Schlüssel mit dem neuen Datum als Wert sind), wenn es Multiplizitäten jedes Vorkommens gibt hash den Wert, der einen Abschnitt in einer verknüpften Liste findet, der dann eine Liste aller Vorkommen enthält (dies würde sowohl das Suchen als auch das Einfügen in O (1) ausführen).

Verwandte Themen