Python 内置的 calendar 模块用于处理日历和日期相关的功能。它不仅可以生成文本或 HTML 日历,还可以把日历数据列表化,方便制作电子日历、统计工作日、周末或节假日。
一、模块主要功能
① 判断年份是否为闰年
import calendarcalendar.isleap(2024) # True
② 计算年份间的闰年数量
calendar.leapdays(2000, 2026)
③ 获取月日历矩阵(列表化)
month_matrix = calendar.monthcalendar(2026, 4)# 每个子列表代表一周,0 表示空白日期
④ 获取星期信息
weekday_index=calendar.weekday(2026, 4, 5) # 0=周一, 6=周日weekday_name=calendar.day_name[weekday_index] # 'Sunday'
⑤ 设置周起始日
calendar.setfirstweekday(calendar.SUNDAY)
文本日历:
text_cal=calendar.TextCalendar(calendar.MONDAY)print(text_cal.formatmonth(2026, 4))
HTML 日历:
html_cal=calendar.HTMLCalendar(calendar.MONDAY)html_code=html_cal.formatmonth(2026, 4)
二、常用函数与打印函数
| | |
|---|
calendar.calendar(year) | | |
calendar.prcal(year) | | |
calendar.month(year, month) | | |
calendar.prmonth(year, month) | | |
calendar.isleap(year) | | |
calendar.leapdays(y1, y2) | | |
calendar.monthcalendar(year, month) | | |
calendar.weekday(year, month, day) | | |
calendar.day_name | | |
calendar.timegm(tuple_time) | | |
示例:
import calendarprint(calendar.month(2026, 4))calendar.prmonth(2026, 4)calendar.prcal(2026)
三、日历列表化与电子日历制作
① 月日历列表化
month_list = [[day if day != 0 else None for day in week] for week in calendar.monthcalendar(2026, 4)]
输出每周日期列表,可直接用于电子日历或表格。
② 整年日历列表化
cal = calendar.Calendar()year_days = [(month, day) for month in range(1, 13) for day in cal.itermonthdays(2026, month) if day != 0]
生成全年日期列表,可用于数据库或 CSV 导出。
③ HTML 日历生成
html_cal = calendar.HTMLCalendar(calendar.MONDAY)html_code = html_cal.formatmonth(2026, 4)with open("april_2026.html", "w") as f: f.write(html_code)
可直接在网页或 GUI 中显示电子日历。
四、与日历相关的计算
① 计算周数
month_matrix = calendar.monthcalendar(2026, 4)week_number = next(i+1 for i, week in enumerate(month_matrix) if 5 in week)
② 统计某月工作日
workdays = [day for day, wd in calendar.Calendar().itermonthdays2(2026, 4) if day != 0 and wd < 5]print(f"工作日数量: {len(workdays)}")
③ 找某月周末
weekends = [day for day, wd in calendar.Calendar().itermonthdays2(2026, 4) if day != 0 and wd >= 5]
④ 固定节日计算
import datetimeholiday = datetime.date(2026, 7, 4)print(calendar.day_name[holiday.weekday()]) # 'Saturday'
五、应用场景
- 与
datetime 配合进行日期计算、倒计时或提醒功能