You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
from datetime import datetime, timedelta
|
|
from lunarcalendar import Converter, Lunar # 用于农历转换
|
|
|
|
# 为完成,需求不明确
|
|
holiday_dict = {
|
|
"元旦": {
|
|
"type": "fixed",
|
|
"date": {"month": 1, "day": 1},
|
|
"duration": 1, # 假期天数
|
|
},
|
|
"春节": {
|
|
"type": "lunar",
|
|
"date": {"month": 1, "day": 1}, # 农历正月初一
|
|
"duration": 7,
|
|
},
|
|
"清明节": {"type": "fixed", "date": {"month": 4, "day": 4}, "duration": 3},
|
|
"劳动节": {"type": "fixed", "date": {"month": 5, "day": 1}, "duration": 5},
|
|
"端午节": {
|
|
"type": "lunar",
|
|
"date": {"month": 5, "day": 5}, # 农历五月初五
|
|
"duration": 3,
|
|
},
|
|
"中秋节": {
|
|
"type": "lunar",
|
|
"date": {"month": 8, "day": 15}, # 农历八月十五
|
|
"duration": 1,
|
|
},
|
|
"国庆节": {"type": "fixed", "date": {"month": 10, "day": 1}, "duration": 7},
|
|
}
|
|
|
|
|
|
def is_holiday(year, month, day):
|
|
current_date = datetime(year, month, day)
|
|
|
|
# 检查是否是固定节假日
|
|
for holiday, info in holiday_dict.items():
|
|
if info["type"] == "fixed":
|
|
holiday_date = datetime(year, info["date"]["month"], info["date"]["day"])
|
|
if (current_date - holiday_date).days >= 0 and (
|
|
current_date - holiday_date
|
|
).days < info["duration"]:
|
|
print(f"今天是:{holiday}")
|
|
return True, holiday
|
|
|
|
# 检查是否是农历节假日
|
|
for holiday, info in holiday_dict.items():
|
|
if info["type"] == "lunar":
|
|
lunar_month = info["date"]["month"]
|
|
lunar_day = info["date"]["day"]
|
|
|
|
# 将农历转换为公历
|
|
lunar = Lunar(year, lunar_month, lunar_day)
|
|
solar_date = Converter.Lunar2Solar(lunar)
|
|
|
|
# 判断当前日期是否在农历节假日范围内
|
|
delta = (
|
|
current_date
|
|
- datetime(solar_date.year, solar_date.month, solar_date.day)
|
|
).days
|
|
if delta >= 0 and delta < info["duration"]:
|
|
print(f"今天是:{holiday}")
|
|
return True, holiday
|
|
|
|
return False, None
|
|
|
|
|
|
def get_last_year_holiday_data(year, month, day, holiday_name):
|
|
last_year = year - 1
|
|
|
|
if holiday_dict[holiday_name]["type"] == "fixed":
|
|
# 获取去年节假日的开始日期和结束日期
|
|
start_date = datetime(
|
|
last_year,
|
|
holiday_dict[holiday_name]["date"]["month"],
|
|
holiday_dict[holiday_name]["date"]["day"],
|
|
)
|
|
end_date = start_date + timedelta(
|
|
days=holiday_dict[holiday_name]["duration"] - 1
|
|
)
|
|
else:
|
|
lunar_month = holiday_dict[holiday_name]["date"]["month"]
|
|
lunar_day = holiday_dict[holiday_name]["date"]["day"]
|
|
|
|
# 将去年的农历转换为公历
|
|
lunar = Lunar(last_year, lunar_month, lunar_day)
|
|
solar_date = Converter.Lunar2Solar(lunar)
|
|
start_date = datetime(solar_date.year, solar_date.month, solar_date.day)
|
|
end_date = start_date + timedelta(
|
|
days=holiday_dict[holiday_name]["duration"] - 1
|
|
)
|
|
|
|
print(f"去年节假日数据时间段: {start_date} 至 {end_date}")
|
|
# 在这里调用数据库查询或其他方法获取去年的数据
|
|
# last_year_data = query_data_from_db(start_date, end_date)
|
|
|
|
return start_date, end_date
|
|
|
|
|
|
year = 2024
|
|
month = 9
|
|
day = 17
|
|
is_holiday_flag, holiday_name = is_holiday(year, month, day)
|
|
if is_holiday_flag:
|
|
start_date, end_date = get_last_year_holiday_data(year, month, day, holiday_name)
|
|
print(f"去年{holiday_name}的日期范围:{start_date} - {end_date}")
|