python - 考虑假期选择营业日期
问题描述
试图设置两个日期:结束日期和开始日期。既不能在周末,也不能在假期。结束日期必须是最近的营业日期 (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')
任何帮助,将不胜感激。
最好的问候,迈克尔
解决方案
所以这对我有用。一个缺点是假期列表必须在需要时手动更新。
# 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)
推荐阅读
- node.js - NestJS - 无法将服务注入订阅者
- flutter - 使用 StreamBuilder 制作动画
- python - 在 ttk 进度条中显示百分比
- r - 闪亮应用程序中的选项卡名称之间没有空格
- ruby-on-rails - 如何从发布请求中重定向 Rails
- vue.js - VueJS + Vue.Draggable + Vuex Store + 计算变量
- html - 如何单击按钮并使用按钮所在项目的项目 ID 将其发送到另一个视图。Laravel - vue.js - 惯性 vue
- liferay - 我们如何以编程方式在 Liferay 中为用户和站点模板创建角色、权限?
- python - 如何使用 CPLEX Solver 定义具有 3d 成本矩阵的 CVRP 目标函数?
- python - 具有本地化日期时间索引的数据框:如何删除没有给定时间的日期