我需要从当前日期中减去工作日。
我目前有一些代码,需要始终在最近的工作日运行。所以如果我们从周一到周五,可能是今天,但如果是周六或周日,那么我需要把它设回周末之前的周五。我目前有一些非常笨重的代码可以做到这一点:
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在工作日而不是日历天工作吗?
发布于 2013-09-27 03:16:37
使用熊猫!
import datetime
# BDay is business day, not birthday...
from pandas.tseries.offsets import BDay
today = datetime.datetime.today()
print(today - BDay(4))
由于今天是9月26日(星期四),因此输出结果为:
datetime.datetime(2013, 9, 20, 14, 8, 4, 89761)
发布于 2010-02-09 04:59:38
如果你愿意安装额外的库,似乎有几个选择。
这篇文章描述了一种使用dateutil定义工作日的方法。
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2004-09/3758.html
BusinessHours允许您自定义假日列表等,以定义您的工作时间(以及扩展工作日)是什么时候。
发布于 2012-02-01 18:25:02
也许下面的代码会有所帮助:
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。
真的不知道这在性能方面是否会更好。
https://stackoverflow.com/questions/2224742
复制相似问题