我正在使用Robot Framework进行测试,需要创建自己的Python关键字。
将当前日期视为第0天(明天为第1天),我试图计算从今天起5天的日期。如果接下来5天中的任何一天是星期六,我需要在计算中多加一天。如果任何一天是星期天,则相同。
作为一名Python初学者,我有点超出我的深度,所以任何帮助都会非常感激
答案 0 :(得分:1)
基本上你需要增加5个工作日...这应该这样做:
import datetime
def addBusinessDays(from_date, add_days):
business_days_to_add = add_days
current_date = from_date
while business_days_to_add > 0:
current_date += datetime.timedelta(days=1)
weekday = current_date.weekday()
if weekday >= 5: # sunday = 6
continue
business_days_to_add -= 1
return current_date
#demo:
print '5 business days from today:'
print addBusinessDays(datetime.date.today(), 5)
更新
以下是解释:
答案 1 :(得分:1)
你可以用数学方法做到:
from datetime import timedelta
def business_days(date, days):
if days == 0:
return date
day = date.weekday()
if day in (5, 6):
date += timedelta(days=7 - day)
days -= 1
date += timedelta(days=days / 5 * 7)
return date + timedelta(days=days % 5)
从您传入的任何日期开始,您都可以使用n
个工作日:
In [6]: dte = datetime.datetime.today()
In [7]: business_days(dte, 5)
Out[7]: datetime.datetime(2016, 1, 6, 11, 28, 38, 264331)
In [8]: business_days(dte, -5)
Out[8]: datetime.datetime(2015, 12, 23, 11, 28, 38, 264331)
答案 2 :(得分:1)
使用NumPy,您可以使用np.busday_offset
找到添加或减少工作日:
由于2016-03-27
是星期日,向前滚动会返回第一个有效营业日2016-03-28
:
import numpy as np
np.busday_offset('2016-03-27', 0, roll='forward')
# numpy.datetime64('2016-03-28')
要获取datetime
个对象,请致电item()
:
np.busday_offset('2016-03-27', 0, roll='forward').item()
# datetime.date(2016, 3, 28)
要提前5个工作日,请将第二个参数更改为5:
np.busday_offset('2016-03-27', 5, roll='forward').item()
# datetime.date(2016, 4, 4)
要回溯5个工作日,请使用负偏移并滚动='向后':
np.busday_offset('2016-03-27', -5, roll='backward').item()
# datetime.date(2016, 3, 18)
np.busday_offset('2016-03-28', -5, roll='backward').item()
# datetime.date(2016, 3, 21)
这是一个日历供参考:
March 2016 April 2016
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 1 2
6 7 8 9 10 11 12 3 4 5 6 7 8 9
13 14 15 16 17 18 19 10 11 12 13 14 15 16
20 21 22 23 24 25 26 17 18 19 20 21 22 23
27 28 29 30 31 24 25 26 27 28 29 30
答案 3 :(得分:0)
如果您想使用大量时间序列,请查看pandas。增加五个工作日非常简单:
from datetime import datetime
import pandas as pd
today = datetime.today()
then = today + pd.tseries.offsets.BDay(5)