2009-06-17 15 views
10

Esiste una struttura dati pubblicata per la memorizzazione di date periodiche o ricorrenti? Qualcosa che può gestire:Qual è una buona struttura dati per le date periodiche o ricorrenti?

  1. La pompa deve essere riciclata ogni cinque giorni.
  2. Il giorno di paga è ogni secondo venerdì.
  3. Il Giorno del Ringraziamento è il secondo lunedì di ottobre (Stati Uniti: il quarto giovedì di novembre).
  4. San Valentino è ogni 14 febbraio.
  5. Il solstizio è (di solito) ogni 21 giugno e 21 dicembre.
  6. La Pasqua è la domenica dopo la prima luna piena o dopo il giorno dell'equinozio di primavera (okay, questo è un po 'troppo lungo).

mi sa struttura dati interna cron s' in grado di gestire # 1, # 4, # 5 (due regole), e forse # 2, ma non ho avuto uno sguardo esso. MS Outlook e altri calendari sembrano essere in grado di gestire i primi cinque, ma non ho quel codice sorgente in giro.

+0

Questo può aiutare: http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application – molf

+0

Grazie. Se avessi appena cercato "ricorrenti" invece di "date ricorrenti" avrei trovato un sacco di domande. – yukondude

risposta

6

utilizzare una libreria iCalendar implementazione, come questi: ruby, java, php, python, .net e java, e poi aggiungere il supporto per il calcolo date speciali.

+1

Grazie. Pensavo che iCalendar sembrasse eccessivo, ma forse è la soluzione più semplice dopo tutto. – yukondude

0

Con tutte queste variazioni nel modo in cui si specifica la ricorrenza, vorrei evitare una singola implementazione della struttura di dati per soddisfare tutti e 5 gli scenari.

Invece, vorrei (e ho per un progetto precedente) costruire strutture semplici che affrontino ogni tipo di ricorrenza. Potresti avvolgerli tutti in modo che sembrino una singola struttura dati, ma sotto la cappa potrebbero fare quello che vogliono. Implementando un'interfaccia, sono stato in grado di trattare ogni tipo di ricorrenza in modo simile, quindi mi sembrava una struttura di dati valida per tutti. Potrei chiedere qualsiasi istanza per tutte le date di ricorrenza entro un certo periodo di tempo, e questo ha fatto il trucco.

Vorrei anche sapere di più su come queste date devono essere utilizzate prima di stabilirsi in un'implementazione specifica.

+0

Sì, penserei che avresti bisogno di un insieme federato di strutture dati, dal momento che i modi di esprimere le ricorrenze sono così diversi. E poi vorresti un'interfaccia che potresti interrogare per trovare se un certo giorno o giorni corrispondono a una delle ricorrenze. In risposta alla tua domanda, le date saranno utilizzate per prenotare tele/video/conferenze Web, alcune delle quali coincidono con le festività nazionali, da qui il "secondo lunedì di ottobre". – yukondude

0

Se si desidera creare una struttura dati, raccomanderei una tabella hash (dove le festività o l'evento sono chiavi con la nuova ricorrenza della data come valore), se ci sono moltiplicazioni di ogni occorrenza che si potrebbe hash il valore che trova una sezione in un elenco collegato, che quindi ha un elenco di tutte le occorrenze (questo renderebbe la ricerca e l'inserimento eseguito in O (1)).

Problemi correlati