根据国务院办公厅关于xxxx年部分节假日安排的通知安排
1、修改target_year为指定年份
2、复制国务院放假安排内容到fetch_china_date方法中的textt中
3、运行main方法,运行效果
4、代码
import re
from datetime import datetime, timedelta
"""获取节假日的网址 https://www.gov.cn/zhengce/content/202411/content_6986382.htm"""
"""目标年"""
target_year = 2025
"""匹配放假日期"""
# 4月4日至6日放假 或则 1月28日至2月4日放假
holiday_pattern = re.compile(r'(\d{1,2}月\d{1,2}日(?:至(\d{1,2}月\d{1,2}日|\d{1,2}日))?)放假')
def extract_holidays(text):
# 使用正则表达式匹配日期和放假信息
holidays = holiday_pattern.findall(text)
holiday_dates = []
for date_str, end_date_str in holidays:
if '至' in date_str:
start_date_str, end_date_str = date_str.split('至')
start_month, start_day = map(int, re.findall(r'\d{1,2}', start_date_str))
end_month, end_day = (start_month, int(end_date_str.split('日')[0])) if '月' not in end_date_str else map(int, re.findall(r'\d{1,2}', end_date_str))
date_range = [datetime(target_year, start_month, start_day) + timedelta(days=i) for i in range((datetime(target_year, end_month, end_day) - datetime(target_year, start_month, start_day)).days + 1)]
for date in date_range:
holiday_dates.append(date.strftime('%Y-%m-%d'))
else:
month, day = map(int, re.findall(r'\d{1,2}', date_str))
holiday_dates.append(datetime(target_year, month, day).strftime('%Y-%m-%d'))
return holiday_dates
def extract_working_days(text):
"""
提取工作日期
:param text: 国务院办公厅关于部分节假日安排的通知
:return:
"""
# 使用正则表达式匹配上班日期
pattern = re.compile(r'。(\d{1,2}月\d{1,2}日(?:、\d{1,2}月\d{1,2}日)?上班)。')
work_days_str = pattern.findall(text)
work_day_list = []
for work_day_str in work_days_str:
work_data_replace = re.sub('上班', '', work_day_str)
work_data_parts = re.split('、', work_data_replace)
for part in work_data_parts:
work_day_list.append(zh_time_format(part))
return work_day_list
def zh_time_format(work_day):
"""
# 根据输入的work_day(x月x日), 转换为"2023-11-11"
:param work_day:
:return:
"""
datetime_obj = datetime.strptime(str(target_year) + "年" + work_day, '%Y年%m月%d日')
return datetime_obj.strftime('%Y-%m-%d')
def remove_bracket(days):
"""
移除"["和"]"
days to string array
"""
return str([str(date) for date in days]).replace('[', '').replace(']', '')
def fetch_china_date():
"""
解析中国的节假日和调休日期
"""
text = """
各省、自治区、直辖市人民政府,国务院各部委、各直属机构:
经国务院批准,现将2024年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。
一、元旦:1月1日放假,与周末连休。
二、春节:2月10日至17日放假调休,共8天。2月4日(星期日)、2月18日(星期日)上班。鼓励各单位结合带薪年休假等制度落实,安排职工在除夕(2月9日)休息。
三、清明节:4月4日至6日放假调休,共3天。4月7日(星期日)上班。
四、劳动节:5月1日至5日放假调休,共5天。4月28日(星期日)、5月11日(星期六)上班。
五、端午节:6月10日放假,与周末连休。
六、中秋节:9月15日至17日放假调休,共3天。9月14日(星期六)上班。
七、国庆节:10月1日至7日放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。
节假日期间,各地区、各部门要妥善安排好值班和安全、保卫、疫情防控等工作,遇有重大突发事件,要按规定及时报告并妥善处置,确保人民群众祥和平安度过节日假期。
"""
# 替换类似于"(周三)"字符串
replace_target_str = re.sub(r'((.*?))', '', text)
holidays = extract_holidays(replace_target_str)
print("放假日期: " + ",".join(holidays))
working_days = extract_working_days(replace_target_str)
print("上班日期: " + ",".join(working_days))
if __name__ == "__main__":
fetch_china_date()