首页 > 解决方案 > 考虑假期选择营业日期

问题描述

试图设置两个日期:结束日期和开始日期。既不能在周末,也不能在假期。结束日期必须是最近的营业日期 (t-1),开始日期必须是结束日期 (t-2) 之前的最近营业日期。假期列表必须手动维护,似乎所有其他可用资源(假期图书馆、工作日历图书馆)都不够用。

我试过并被困在这里:

import pandas as pd
import time
from datetime import datetime, date, time, timedelta
import csv

enddate = datetime.today() - timedelta(days = 1)
if datetime.weekday(enddate) == 6:
    enddate = enddate - timedelta(days = 2)
elif datetime.weekday(enddate) == 5:
    enddate = enddate - timedelta(days = 1)

begdate = enddate - timedelta(days = 1)
if datetime.weekday(begdate) == 6:
    begdate = begdate - timedelta(days = 2)
elif datetime.weekday(begdate) == 5:
    begdate = begdate - timedelta(days = 1)
    
holidaylist = pd.read_csv('holiday.csv')

任何帮助,将不胜感激。

最好的问候,迈克尔

标签: pythonpandasdatetime

解决方案


所以这对我有用。一个缺点是假期列表必须在需要时手动更新。

# Date Setup

holidaylist = pd.read_csv('holiday.csv')
holidaylist['Date'] = pd.to_datetime(holidaylist['Date'])

# enddate = date(2020, 12, 28)
enddate = datetime.today() - timedelta(days = 1)
while enddate in holidaylist.values or datetime.weekday(enddate) == 6 or datetime.weekday(enddate) == 5:
    enddate = enddate - timedelta(days = 1)

begdate = enddate - timedelta(days = 1)
while begdate in holidaylist.values or datetime.weekday(begdate) == 6 or datetime.weekday(begdate) == 5:
    begdate = begdate - timedelta(days = 1)

ed = enddate.strftime("%Y-%m-%d")
bd = begdate.strftime("%Y-%m-%d")
                      
# print(ed,bd)

推荐阅读