我正在使用Robot Framework進行測試,需要創建自己的Python關鍵字。計算距離今天5天后的日期,並在接下來的5天內爲每個週末添加額外的一天,即週末日
以當前日期爲第0天(明天爲第1天),我試圖計算從今天開始的5天后的日期。如果接下來5天的任何一天是星期六,我需要在計算中添加額外的一天。如果其中任何一天是星期日,也是一樣。
作爲一個Python初學者,我出我的深度一點,所以任何幫助,將不勝感激
我正在使用Robot Framework進行測試,需要創建自己的Python關鍵字。計算距離今天5天后的日期,並在接下來的5天內爲每個週末添加額外的一天,即週末日
以當前日期爲第0天(明天爲第1天),我試圖計算從今天開始的5天后的日期。如果接下來5天的任何一天是星期六,我需要在計算中添加額外的一天。如果其中任何一天是星期日,也是一樣。
作爲一個Python初學者,我出我的深度一點,所以任何幫助,將不勝感激
基本上你需要添加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)
更新:
這裏的解釋是:
有更多的解釋會很好,所以初學者可以理解。 – Mel
你可以這樣做數學:
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)
如果你想使用很多時間序列,看看pandas。添加五個工作日是相當簡單:
from datetime import datetime
import pandas as pd
today = datetime.today()
then = today + pd.tseries.offsets.BDay(5)
使用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)
難道不是在這種情況下,爲SA/SU增加5天和1天實際上與增加一整週(7天)相同嗎?如果你不需要任何通用的東西,你可以簡單地使用'dt + timedelta(days = 7)' – eumiro
來添加7天,除非它是星期一。然後你只是返回'星期五' – ssm
星期一的第五天是星期六。 – Mel