Ajouter n jours ouvrés à une date donnée en ignorant les jours fériés et les week-ends en python
J'essaie d'ajouter de n (entier) jours de travail à une date donnée, la date à éviter les jours fériés et les week-ends (il n'est pas inclus dans les jours de travail)
source d'informationauteur cyberbrain | 2012-10-02
Vous devez vous connecter pour publier un commentaire.
Ignorant les week-ends serait assez facile de faire quelque chose comme ceci:
Le problème avec les vacances, c'est qu'ils varient beaucoup selon le pays ou même par la région, la religion, etc. Vous avez besoin d'une liste/set de vacances pour votre cas d'utilisation, puis les sauter dans une manière similaire. Un point de départ pourrait être le calendrier d'alimentation que Apple publie pour iCal (dans le format ics), l'un pour les états-unis seraient http://files.apple.com/calendars/US32Holidays.ics
Vous pouvez utiliser le icalendar module d'analyser ce.
Si vous n'avez pas l'esprit à l'aide d'un 3ème partie de la bibliothèque, puis dateutil est à portée de main
Vous pouvez également regarder
rruleset
et à l'aide de.exdate()
de fournir les vacances à ignorer ceux dans le calcul, et éventuellement il y a uncache
option pour éviter de re-calcul qui pourrait être intéressant de regarder dans.Grâce basé sur omz code que j'ai fait quelques petits changements ...il peut-être utile pour d'autres utilisateurs:
Je voulais une solution qui n'était pas en O(N) et il a regardé comme un amusement peu de code de golf. Voici ce que je me suis cogné dans le cas où quelqu'un est intéressé. Fonctionne pour les nombres positifs et négatifs. Permettez-moi de savoir si j'ai raté quelque chose.
Il n'y a pas de véritable raccourci pour ce faire. Essayez cette approche:
skip(self, d)
qui renvoieTrue
pour les dates qui doivent être ignorés.datetime
ou similaires parce que les fractions de jour va vous tuer.True
pour n'importe quelle date dans le dictionnaire oud.weekday() >= 5
À ajouter les N jours, l'utilisation de cette méthode:
Cela va prendre un peu de travail car il n'y a pas défini de construire pour des vacances en toute bibliothèque (par ma connaissance du moins). Vous aurez besoin pour créer votre propre énumération de ceux-ci.
Vérification pour les jours de week-end est fait facilement, en appelant
.weekday() < 6
sur votre objet datetime.Espère que cette aide. Ce n'est pas
O(N)
maisO(holidays)
. Aussi, les jours fériés ne fonctionne que lorsque le décalage est positif.