2009-06-17 14 views
10

Czy istnieje opublikowana struktura danych do przechowywania okresowych lub cyklicznych dat? Coś, co może obsłużyć:Jaka jest dobra struktura danych dla okresowych lub cyklicznych dat?

  1. Pompa wymaga recyklingu co pięć dni.
  2. Dzień wypłaty jest co drugi piątek.
  3. Święto Dziękczynienia to drugi poniedziałek października (USA: czwarty czwartek listopada).
  4. Walentynki to 14 lutego.
  5. Przesilenie jest (zwykle) co 21 czerwca i 21 grudnia.
  6. Wielkanoc jest niedzielą po pierwszej pełni księżyca w dniu lub po dniu wiosennego zrównania dnia z nocą (w porządku, ten jest trochę rozciągliwy).

Sądzę wewnętrzna struktura danych cron „s może obsługiwać # 1, # 4, # 5 (dwie zasady), a może i # 2, ale nie miałem na niego okiem. MS Outlook i inne kalendarze wydają się być w stanie obsłużyć pierwsze pięć, ale nie mam tego kodu źródłowego.

+0

Może to pomóc: http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application- – molf

+0

Dzięki. Gdybym właśnie szukał "powtarzających się" zamiast "powtarzających się dat", znalazłbym całą masę pytań. – yukondude

Odpowiedz

6

Użyj biblioteki iCalendar realizacji, jak te z nich: ruby, java, php, python, .net i java, a następnie dodać wsparcie dla obliczania datach.

+1

Dzięki. Myślałem, że iCalendar wydaje się być przesadą, ale być może jest to najprostsze rozwiązanie. – yukondude

0

Przy tych wszystkich różnicach w sposobie określania powtarzalności, unikałbym jednej implementacji struktury danych, aby uwzględnić wszystkie 5 scenariuszy.

Zamiast tego, chciałbym (i mam na poprzedni projekt) zbudować proste struktury, które odnoszą się do każdego rodzaju powtarzania. Możesz je wszystkie zawinąć tak, aby wyglądały jak pojedyncza struktura danych, ale pod maską mogą robić, co im się podoba. Implementując interfejs, mogłem podobnie traktować każdy rodzaj powtarzania, więc czułem się jak struktura danych uniwersalna. Mógłbym poprosić o dowolną instancję dla wszystkich dat powtarzania się w określonym przedziale czasowym i to wystarczyło.

Chciałbym również dowiedzieć się więcej o tym, jak te daty muszą być wykorzystane przed ustaleniem konkretnej realizacji.

+0

Tak, myślę, że potrzebujesz federacyjnego zestawu struktur danych, ponieważ sposoby wyrażania nawrotów są tak różne. A potem chcesz mieć interfejs, który możesz zapytać, czy dany dzień lub dni pasują do któregokolwiek z nawrotów. Odpowiadając na twoje pytanie, terminy zostaną wykorzystane do rezerwacji telekonferencji/wideokonferencji, z których niektóre pokrywają się z dniami świątecznymi, a więc z "drugim poniedziałkiem w październiku". – yukondude

0

Jeśli chcesz utworzyć strukturę danych, polecam tablicę haszującą (gdzie święta lub wydarzenie są kluczami z nowym wystąpieniem daty jako wartością), jeśli istnieje wiele wystąpień każdego zdarzenia hash wartość, która znajduje sekcję na liście połączonej, która następnie zawiera listę wszystkich wystąpień (to sprawiłoby, że wyszukiwanie oraz wstawianie były uruchamiane w O (1)).

Powiązane problemy