Les plus récentes jour ouvrable précédent en Python
J'ai besoin de soustraire jours ouvrables à partir de la date actuelle.
J'ai actuellement un code qui doit toujours être en cours d'exécution les plus récentes sur les affaires de la journée. De sorte que peut être aujourd'hui, si nous sommes ouvert du lundi au vendredi, mais si c'est samedi ou dimanche alors que je dois repasser sur le vendredi avant le week-end. J'ai actuellement quelques jolies maladroit code pour ce faire:
lastBusDay = datetime.datetime.today()
if datetime.date.weekday(lastBusDay) == 5: #if it's Saturday
lastBusDay = lastBusDay - datetime.timedelta(days = 1) #then make it Friday
elif datetime.date.weekday(lastBusDay) == 6: #if it's Sunday
lastBusDay = lastBusDay - datetime.timedelta(days = 2); #then make it Friday
Est-il un meilleur moyen?
Puis-je dire timedelta de travail dans la semaine plutôt que de jours calendrier, par exemple?
- Qu'en vacances?
- Voici un extrait de dzzone qui pourrait t'aider: snippets.dzone.com/posts/show/9173
- ouais, je suis déjà en prenant soin de celles-ci: ma base de données toujours des remblais vacances aussi longtemps qu'ils tombent sur un jour de semaine. Mais je suis d'accord, les vacances en général sont également un problème. Je veux dire que je pouvais commencer à obtenir la fantaisie et à l'utilisation de la sckits.timeseries mais vraiment je veux quelque chose de plus simple.
- bonjour, je suis en retard à la fête, désolé. une simple chose OP pouvait avoir à faire est de vérifier si le type datetime.date.jour de la semaine(lastBusDay) >=5 au lieu de vérifier le samedi et le dimanche en face de la maison. mais oui .. il y a de mieux répondre ci-dessous, de toute façon.
Vous devez vous connecter pour publier un commentaire.
Utiliser les pandas!
Puisque c'est aujourd'hui jeudi, le 26 Septembre, qui vous donnera une puissance de:
Il semble y avoir plusieurs options si vous êtes ouvert à l'installation de bibliothèques supplémentaires.
Ce post décrit la manière de définir les jours ouvrables avec dateutil.
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/3758.html
BusinessHours vous permet de personnaliser définir votre liste de vacances, etc. pour définir lors de vos heures de travail (et, par extension, de travail jours).
http://pypi.python.org/pypi/BusinessHours/
self.worktiming[1]
(en l'absence de auto) et de la ligne 51 devriez lireextradays
(en l'absence de s). Le code source lui-même est assez pauvre avec des points-virgules sont dispersés partout.Clause de non-responsabilité: je suis l'auteur...
J'ai écrit un paquet qui fait exactement cela, dates des calculs. Vous pouvez utiliser la coutume de la semaine de la spécification et les jours fériés.
J'ai eu exactement ce problème tout en travaillant avec des données financières et de ne pas trouver toutes les solutions disponibles particulièrement facile, j'ai donc écrit un.
Espère que ce sera utile pour d'autres personnes.
https://pypi.python.org/pypi/business_calendar/
Peut-être que ce code pourrait aider:
L'idée est que le lundi yo avoir à retourner 3 jours, le dimanche, 2, et 1 dans n'importe quel autre jour.
La déclaration
(lastBusDay.weekday() + 6) % 7
viens de re-bases le lundi de 0 à 6.Ne sais vraiment pas si ce sera de mieux en termes de performances.
Si vous voulez sauter les jours fériés ainsi que les week-ends, cela a fonctionné pour moi (à l'aide de pandas 0.23.3):
Convertir en python objet date, je l'ai fait:
timeboard
colis n'cette.Supposons que votre date est 04 Sep 2017. En dépit d'être un lundi, c'était un jour férié aux états-unis (de la Journée de Travail). Alors, la plus récente d'affaires était vendredi, Sep 1.
Au royaume-UNI, 04 Sep 2017 a les affaires courantes de la journée, de sorte que la plupart des récentes affaires de la journée a été lui-même.
AVERTISSEMENT: je suis l'auteur de timeboard.
Cela donnera un générateur de jours de travail, bien sûr, sans vacances, arrêter est de type datetime.objet datetime. Si vous avez besoin de vacances tout faire argument supplémentaire avec la liste des jours fériés et de vérifier avec 'IFology' 😉
Plus tard, vous pouvez les compter comme
Pourquoi ne pas vous essayez quelque chose comme: