背景
最近计划把之前的一些idea能实现的通过web实现一下,不能实现的也做个最大化的尝试,为这一阶段的编程做个小结。如题,这个小项目是实现北向资金的动态可视化(个股最近五日的短曲线组合),因此需要用到工作日的判别。
代码
如果需要包含中国法定节假日的判断,可以在函数中加入相应的逻辑来判断当前日期是否为法定节假日,如果是,则调整当前工作日和上一个工作日的日期为法定节假日结束后的第一个工作日。下面是一个简单的示例代码:
import datetime
import calendar
# 法定节假日列表,可根据实际情况修改
holiday_list = [
'2022-01-01', '2022-01-02', '2022-01-03', '2022-02-01', '2022-02-02',
'2022-02-03', '2022-02-04', '2022-02-05', '2022-02-06', '2022-02-07',
'2022-04-04', '2022-04-05', '2022-04-06', '2022-05-01', '2022-05-02',
'2022-05-03', '2022-06-03', '2022-06-04', '2022-06-05', '2022-09-10',
'2022-09-11', '2022-09-12', '2022-10-01', '2022-10-02', '2022-10-03',
'2022-10-04', '2022-10-05', '2022-10-06', '2022-10-07'
]
def is_holiday(date_str):
"""
判断指定日期是否为法定节假日
"""
return date_str in holiday_list
def get_last_workday():
"""
获取上一个工作日的年月日字符串
"""
today = datetime.date.today()
weekday = today.weekday()
if weekday == 0:
# 如果今天是周一,上一个工作日是上周五
last_workday = today - datetime.timedelta(days=3)
else:
# 否则,上一个工作日就是昨天
last_workday = today - datetime.timedelta(days=1)
# 如果上一个工作日是法定节假日,则调整为法定节假日结束后的第一个工作日
while is_holiday(last_workday.strftime('%Y-%m-%d')):
last_workday -= datetime.timedelta(days=1)
return last_workday.strftime('%Y-%m-%d')
def get_current_workday():
"""
获取当前工作日的年月日字符串
"""
today = datetime.date.today()
weekday = today.weekday()
if weekday == 5:
# 如果今天是周六,当前工作日是下周一
current_workday = today + datetime.timedelta(days=2)
elif weekday == 6:
# 如果今天是周日,当前工作日是下周一
current_workday = today + datetime.timedelta(days=1)
else:
# 否则,今天就是当前工作日
current_workday = today
# 如果当前工作日是法定节假日,则调整为法定节假日结束后的第一个工作日
while is_holiday(current_workday.strftime('%Y-%m-%d')):
current_workday += datetime.timedelta(days=1)
return current_workday.strftime('%Y-%m-%d')
在这个示例代码中,我们定义了一个 holiday_list 列表来存储法定节假日的日期,然后在函数中加入了判断当前日期是否为法定节假日的逻辑,并对当前工作日和上一个工作日进行了相应的调整,使它们不会落在法定节假日上。
civilpy:Python数据分析及可视化实例目录