import datetime
import re
from holidays import CN # 导入中国的节假日库
# 开始日期
start_date = datetime.date(2024, 8, 5)
end_date = datetime.date(2024, 12, 31)
# 当前日期
current_date = start_date
# 节假日和调休的详情
holidays_cn = CN(years=2024)
# 存储调休日期及其对应的原始节假日
compensatory_dict = {str(date): re.findall("休息日((.*?)日起取代)", desc)[0] for date, desc in holidays_cn.items() if "取代" in desc} # 休息日(2024-09-29日起取代)
print(compensatory_dict.items())
print(compensatory_dict.keys())
print(compensatory_dict.values())
print()
holiday_name = ""
while current_date <= end_date: # 假定我们只打印2024年的日期
# 如果是工作日和周末
if current_date.weekday() < 5: # 0-4 是周一到周五
day_name = ""
elif current_date.weekday() in [5, 6]: # 5-6 是周六和周日
day_name = "(" + current_date.strftime("%A")[0:3] + ")"
# 检查是否是节假日
if current_date in holidays_cn:
holiday_or_compensatory_desc = holidays_cn[current_date]
if "节" in holiday_or_compensatory_desc:
holiday_name = holiday_or_compensatory_desc
else:
holiday_or_compensatory_desc = f"{holiday_name}[{holidays_cn[current_date]}]"
else:
# 检查是否是调休
if str(current_date) in compensatory_dict.keys():
# original_holiday = datetime.date(current_date.year, *holidays_cn.get_date(compensatory_dict[current_date]))
holiday_or_compensatory_desc = f"(官方放假)" + holiday_or_compensatory_desc
elif str(current_date) in compensatory_dict.values():
holiday_or_compensatory_desc = f"(官方补班)" + holiday_or_compensatory_desc
else:
holiday_or_compensatory_desc = ""
# 递增日期
print(f"{current_date}:{day_name}1.{holiday_or_compensatory_desc}。hour:8。")
if current_date.weekday() == 6:
print("-" * 100)
current_date += datetime.timedelta(days=1)
### 运行结果
----------------------------------------------------------------------------------------------------
2024-09-30:1.。hour:8。
2024-10-01:1.国庆节。hour:8。
2024-10-02:1.国庆节。hour:8。
2024-10-03:1.国庆节。hour:8。
2024-10-04:1.国庆节[休息日(2024-09-29日起取代)]。hour:8。
2024-10-05:(Sat)1.。hour:8。
2024-10-06:(Sun)1.。hour:8。
----------------------------------------------------------------------------------------------------
2024-10-07:1.国庆节[休息日(2024-10-12日起取代)]。hour:8。
2024-10-08:1.。hour:8。
2024-10-09:1.。hour:8。
2024-10-10:1.。hour:8。
2024-10-11:1.。hour:8。
2024-10-12:(Sat)1.(官方补班)。hour:8。
2024-10-13:(Sun)1.。hour:8。
----------------------------------------------------------------------------------------------------
2024-10-14:1.。hour:8。
2024-10-15:1.。hour:8。
2024-10-16:1.。hour:8。
2024-10-17:1.。hour:8。
2024-10-18:1.。hour:8。
2024-10-19:(Sat)1.。hour:8。
2024-10-20:(Sun)1.。hour:8。
----------------------------------------------------------------------------------------------------