2009-06-17 13 views
10

¿Existe una estructura de datos publicada para almacenar fechas periódicas o recurrentes? Algo que puede manejar:¿Cuál es una buena estructura de datos para fechas periódicas o recurrentes?

  1. La bomba necesita reciclaje cada cinco días.
  2. El día de pago es cada segundo viernes.
  3. El Día de Acción de Gracias es el segundo lunes de octubre (EE. UU .: el cuarto jueves de noviembre).
  4. Día de San Valentín es cada 14 de febrero.
  5. Solstice es (generalmente) cada 21 de junio y 21 de diciembre.
  6. Pascua es el domingo después de la primera luna llena en o después del día del equinoccio de primavera (está bien, este es un poco exagerado).

calculo estructura de datos interna cron 's puede manejar # 1, # 4, # 5 (dos reglas), y tal vez # 2, pero no he tenido una mirada en ella. MS Outlook y otros calendarios parecen ser capaces de manejar los primeros cinco, pero no tengo ese código fuente por ahí.

+0

Esto puede ayudar: http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application – molf

+0

Gracias. Si hubiera buscado "recurrentes" en lugar de "fechas recurrentes", habría encontrado un montón de preguntas. – yukondude

Respuesta

6

utilizar una biblioteca iCalendar aplicación, como éstas: ruby, java, php, python, .net y java, y luego añadir soporte para el cálculo de fechas especiales.

+1

Gracias. Pensé que iCalendar parecía exagerado, pero tal vez es la solución más simple después de todo. – yukondude

0

Con todas estas variaciones en la forma en que especifica la recurrencia, rehuiría una sola implementación de estructura de datos para acomodar los 5 escenarios.

En su lugar, me gustaría (y tengo para un proyecto anterior) construir estructuras simples que abordan cada tipo de recurrencia. Podrías envolverlos todos para que se sienta como una estructura de datos única, pero bajo la capucha podrían hacer lo que quieran. Al implementar una interfaz, pude tratar cada tipo de recurrencia de manera similar, por lo que se sintió como una estructura de datos única para todos. Podría pedir cualquier instancia para todas las fechas de recurrencia dentro de un cierto marco de tiempo, y eso fue lo que hizo.

También me gustaría saber más acerca de cómo deben usarse estas fechas antes de decidirse por una implementación específica.

+0

Sí, creo que necesitaría un conjunto federado de estructuras de datos, ya que las formas de expresar las recurrencias son muy diferentes. Y luego querrá una interfaz que pueda consultar para encontrar si un determinado día o días coinciden con alguna de las recurrencias. En respuesta a su pregunta, las fechas se utilizarán para reservar tele/video/web-conferencias, algunas de las cuales coinciden con feriados nacionales, de ahí el negocio "segundo lunes de octubre". – yukondude

0

Si desea crear una estructura de datos práctica, recomiendo una tabla hash (donde las vacaciones o eventos son claves con la nueva aparición de fecha como un valor), si hay multiplicidades de cada aparición que podría hash el valor que encuentra una sección en una lista vinculada, que luego tiene una lista de todas las ocurrencias (esto haría que la búsqueda y la inserción se ejecutaran en O (1)).

Cuestiones relacionadas