Qu'est-ce qu'une bonne structure de données pour des dates périodiques ou récurrentes?

StackOverflow https://stackoverflow.com/questions/1009874

  •  06-07-2019
  •  | 
  •  

Question

Existe-t-il une structure de données publiée permettant de stocker des dates périodiques ou récurrentes? Quelque chose qui peut gérer:

  1. La pompe doit être recyclée tous les cinq jours.
  2. Le jour de paie est le deuxième vendredi.
  3. Le jour de Thanksgiving est le deuxième lundi d'octobre (aux États-Unis: le quatrième jeudi de novembre).
  4. La Saint-Valentin est le 14 février.
  5. Le solstice est (habituellement) tous les 21 juin et 21 décembre.
  6. Pâques est le dimanche qui suit la première pleine lune le ou après le jour de l'équinoxe de printemps (d'accord, c'est un peu exagéré).

Je pense que la structure de données interne de cron peut gérer les commandes n ° 1, n ° 4, n ° 5 (deux règles) et peut-être n ° 2, mais je n'y ai pas jeté un œil. MS Outlook et d'autres calendriers semblent être capables de gérer les cinq premiers, mais je n'ai pas ce code source qui traîne.

Était-ce utile?

La solution

Utilisez une bibliothèque d'implémentation iCalendar , comme celle-ci: ruby ??, java , php , python , .net et java , puis prise en charge du calcul des dates spéciales.

Autres conseils

Avec toutes ces variations dans la manière dont vous spécifiez la récurrence, je craindrais une seule implémentation de la structure de données pour prendre en charge les 5 scénarios.

Au lieu de cela, je construirais (et créerais pour un projet précédent) des structures simples qui traitent chaque type de récurrence. Vous pouvez les résumer de manière à créer une structure de données unique, mais sous le capot, ils peuvent faire ce qu'ils veulent. En mettant en place une interface, j'ai été en mesure de traiter chaque type de récurrence de la même manière, ce qui m'a semblé être une structure de données unique. Je pourrais demander à n’importe quel cas toutes les dates de récurrence dans un certain laps de temps, et c’est tout.

J'aimerais également en savoir plus sur la manière dont ces dates doivent être utilisées avant de choisir une implémentation spécifique.

Si vous voulez créer une structure de données sur le terrain, je vous recommanderais une table de hachage (où les vacances ou les événements sont des clés avec la nouvelle occurrence de date comme valeur). la valeur qui trouve une section dans une liste chaînée, qui a alors une liste de toutes les occurrences (ceci ferait rechercher et exécuter une insertion dans O (1)).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top