Python calendar 模块专家指南:代码示例详解
Python 内置 calendar 模块提供强大工具处理日期、月份、年份。利用 TextCalendar 和 HTMLCalendar 类,开发者可创建可打印或 Web 友好的日历、遍历日期、甚至计算自定义调度规则。
下面通过最常用用例分步演示,附带 Python 2/3 可直接运行的代码片段。
步骤 1:生成文本日历
运行以下脚本查看 2025 年 1 月以周四为每周起始的纯文本日历:

- 第 1 行:
import calendar导入模块。 - 第 3 行:
c = calendar.TextCalendar(calendar.THURSDAY)创建周四起始的日历对象。 - 第 4 行:
txt = c.formatmonth(2025, 1)格式化 2025 年 1 月。 - 第 5 行:
print(txt)输出日历。
改为周日起始验证灵活性:

步骤 2:渲染 HTML 日历
Web 应用可用 HTMLCalendar 生成完整 HTML 表格,配合 CSS 样式:

步骤 3:遍历月份日期
itermonthdays 方法生成月份所有日期,包含相邻月份填充的零值,便于对齐日历:

- 零值表示目标月份之外的槽位。
- 有助于确定月份起始和结束于哪一周。
步骤 4:获取本地化名称
Python 自动遵循系统区域设置输出月份和星期名称。下例展示打印 calendar.month_name 和 calendar.day_name 的输出:

不同机器区域设置不同,结果可能因用户所在国家而异。
步骤 5:计算自定义日期(如每月第一个周一)
以下简洁脚本查找 2025 年每月第一个周一:

逻辑使用 calendar.monthcalendar 获取周矩阵,检查前两周非零周一值。
Python 2 示例
import calendar
# 创建纯文本日历
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print text
# 创建 HTML 格式日历
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print html
# 遍历月份日期
for i in c.itermonthdays(2025, 4):
print i
# 本地化月份和星期名称
for name in calendar.month_name:
print name
for day in calendar.day_name:
print day
# 查找每月第一个周一
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print "%10s %2d" % (calendar.month_name[month], auditday)
Python 3 示例
import calendar
# 创建纯文本日历
c = calendar.TextCalendar(calendar.THURSDAY)
text = c.formatmonth(2025, 1)
print(text)
# 创建 HTML 格式日历
hc = calendar.HTMLCalendar(calendar.THURSDAY)
html = hc.formatmonth(2025, 1)
print(html)
# 遍历月份日期
for i in c.itermonthdays(2025, 4):
print(i)
# 本地化月份和星期名称
for name in calendar.month_name:
print(name)
for day in calendar.day_name:
print(day)
# 查找每月第一个周一
for month in range(1, 13):
mycal = calendar.monthcalendar(2025, month)
week1 = mycal[0]
week2 = mycal[1]
if week1[calendar.MONDAY] != 0:
auditday = week1[calendar.MONDAY]
else:
auditday = week2[calendar.MONDAY]
print("%10s %2d" % (calendar.month_name[month], auditday))
核心要点
- 使用
TextCalendar和HTMLCalendar自定义周起始日和格式。 - 用
itermonthdays精准布局日历,处理填充零值。 - 通过
calendar.month_name和calendar.day_name自动获取本地化数据。 - 结合
calendar.monthcalendar与简单逻辑计算规则日期(如每月第一个周一)。
Python
- C# 抽象类实战教程:从定义到派生的完整代码示例
- C# Windows Forms 开发实战教程:从入门到进阶控件应用
- Python strip() 方法完全指南:去除首尾空白与自定义字符实战
- Python str.count() 完全指南:统计字符与子串出现次数实战
- Python round() 函数详解与实战示例
- 精通 Python map() 函数:语法、示例与最佳实践
- Python timeit():精准测量代码执行时间与实战示例
- 精通 Python yield:生成器 vs return 实战指南
- Python collections.Counter:高效计数、更新与算术运算
- Python list.count() 专家指南:语法、示例与性能解析
- Python list.index() 详解:查找元素位置的实用指南与示例
- Python C 扩展开发指南:构建高性能原生模块