首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中最近的前一个工作日

Python中最近的前一个工作日
EN

Stack Overflow用户
提问于 2010-02-09 04:47:33
回答 13查看 150.7K关注 0票数 90

我需要从当前日期中减去工作日。

我目前有一些代码,需要始终在最近的工作日运行。所以如果我们从周一到周五,可能是今天,但如果是周六或周日,那么我需要把它设回周末之前的周五。我目前有一些非常笨重的代码可以做到这一点:

代码语言:javascript
复制
 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

有没有更好的方法?

例如,我可以告诉timedelta在工作日而不是日历天工作吗?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-09-27 03:16:37

使用熊猫!

代码语言:javascript
复制
import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay

today = datetime.datetime.today()
print(today - BDay(4))

由于今天是9月26日(星期四),因此输出结果为:

代码语言:javascript
复制
datetime.datetime(2013, 9, 20, 14, 8, 4, 89761)
票数 163
EN

Stack Overflow用户

发布于 2010-02-09 04:59:38

如果你愿意安装额外的库,似乎有几个选择。

这篇文章描述了一种使用dateutil定义工作日的方法。

http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/3758.html

BusinessHours允许您自定义假日列表等,以定义您的工作时间(以及扩展工作日)是什么时候。

http://pypi.python.org/pypi/BusinessHours/

票数 13
EN

Stack Overflow用户

发布于 2012-02-01 18:25:02

也许下面的代码会有所帮助:

代码语言:javascript
复制
lastBusDay = datetime.datetime.today()
shift = datetime.timedelta(max(1,(lastBusDay.weekday() + 6) % 7 - 3))
lastBusDay = lastBusDay - shift

这个想法是,在星期一,你必须返回3天,周日2天,其他任何一天1天。

语句(lastBusDay.weekday() + 6) % 7只是将星期一的基数从0改为6。

真的不知道这在性能方面是否会更好。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2224742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档