import calendar
import datetime
# 定义一个函数来标注特定的节日
def highlight_holidays(year, month, holidays):
"""
标注指定年月中的特定节日日期。
:param year: 要标注的年份
:param month: 要标注的月份(1-12)
:param holidays: 一个字典,包含节日的名称和对应的日期
:return: 标注节日后的日历
"""
# 创建一个日历实例
cal = calendar.TextCalendar(calendar.MONDAY)
# 获取月份的日历文本
month_days = cal.formatmonth(year, month)
# 解析月份中的每一天
days = month_days.split('\n')[1:] # 去掉标题行
# 转换日期为星期
for day in days:
for date_str in day.split():
# 尝试将日期字符串转换为日期对象
try:
day_number = int(date_str)
# 格式化日期(年-月-日)
formatted_date = f"{year}-{month:02d}-{day_number:02d}"
# 检查日期是否为节日
if formatted_date in holidays:
# 如果是节日,将其转换为大写
day = day.replace(date_str, f"\033[1;31m{date_str}\033[0m")
except ValueError:
# 忽略非数字部分
continue
return '\n'.join(days)
# 定义一个示例节日字典
holidays_example = {
"2023-01-01": "New Year's Day",
"2023-12-25": "Christmas Day",
"2023-10-31": "Halloween",
"2023-07-04": "Independence Day",
"2023-11-28": "Thanksgiving"
}
# 用户自定义日期
custom_year = 2023
custom_month = 12
# 打印标注节日的日历
print(highlight_holidays(custom_year, custom_month, holidays_example))
这段代码演示了如何使用Python编写一个简单的脚本,以打印出一个带有节日标注的日历。下面是对代码的详细解释:
- 首先,我们导入了
calendar模块,它是Python标准库的一部分,提供了与日历相关的函数。 highlight_holidays函数接收年份、月份和一个节日字典作为参数。节日字典包含了日期和节日名称。- 使用
TextCalendar创建了一个文本日历实例,指定周一作为每周的第一天。 - 通过
formatmonth方法获取指定年月的日历文本。 - 然后,我们解析这个文本,遍历每一天,尝试将其转换为日期对象,并检查是否为节日。
- 如果找到节日,使用ANSI转义序列将节日日期设置为红色(这里假设终端支持ANSI转义序列)。
- 最后,返回包含节日标注的日历文本。
请将这段代码保存为一个.py文件,并在支持ANSI转义序列的Python环境中运行它。它会输出一个带有节日标注的日历,你可以在自己的代码中调整节日和年份,以适应不同的需求。
