Python calendar 模块用法
calendar是Python内置模块,用于处理日历、星期、月份、年份相关计算,不需要pip安装,直接import即可。
1. 打印整月日历:month() / prmonth()
calendar.month(year,month)calendar.prmonth(year,month)
import calendar # 返回2026年8月的日历字符串print(calendar.month(2026, 8)) # 直接打印2026年8月日历calendar.prmonth(2026, 8)
输出示例:
August 2026Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 2223 24 25 26 27 28 2930 31
2. 打印整年日历:calendar() / prcal()
# 获取2026全年日历字符串cal_str = calendar.calendar(2026)print(cal_str)# 直接打印全年calendar.prcal(2026)
3. 判断闰年:isleap(year)
返回True闰年,False平年
print(calendar.isleap(2024)) # Trueprint(calendar.isleap(2026)) # False
4. 计算两个年份之间闰年数量:leapdays(y1,y2)
区间:y1 ~ y2‑1,左闭右开
# 2020到2026之间有多少闰年print(calendar.leapdays(2020,2026))
5. 获取某月信息:monthrange(year,month)
返回元组 (该月第一天星期几, 该月总天数)
⚠️ calendar模块星期编码:0=周一,6=周日
# 2026‑08week_first, day_count = calendar.monthrange(2026,8)print(”8月1号星期编号:”,week_first)print(”8月总天数:”,day_count)
6. 获取某月每一日的星期:monthcalendar(year,month)
返回二维列表,一行为日历的一行,数字代表日期,0代表空白。
data = calendar.monthcalendar(2026,8)print(data)'''[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9,10,11,12,13,14,15], [16,17,18,19,20,21,22], [23,24,25,26,27,28,29], [30,31,0,0,0,0,0]]'''
7. 星期名称、月份名称
# 星期列表,默认从周一开始print(calendar.day_name)print(calendar.day_abbr) #简写 Mon,Tue…# 月份print(calendar.month_name)print(calendar.month_abbr) #简写 Jan,Feb…
8. weekday() / monthrange星期编码说明
calendar.weekday(year,month,day)
# 2026‑08‑20是星期几w = calendar.weekday(2026,8,20)print(w)print(calendar.day_name[w])
💡对比:datetime模块 datetime.weekday()同样0=周一;datetime.isoweekday() 1=周一,7=周日。
9. 修改日历起始星期(默认周一0)
# 设置日历第一列为周日calendar.setfirstweekday(calendar.SUNDAY)calendar.prmonth(2026,8)
常量:calendar.MONDAY=0,calendar.SUNDAY=6
10. 实用小示例
示例1:遍历某月所有日期
import calendary,m = 2026,8_,total_days = calendar.monthrange(y,m)for d in range(1, total_days+1): wd = calendar.weekday(y,m,d) print(f”{y}-{m:02d}-{d:02d} {calendar.day_name[wd]}”)
示例2:判断今天是否闰年
import calendarprint(calendar.isleap(2026))
⚠️注意点
- calendar模块只做日历计算,不获取系统当前时间;要获取当前年月日需要搭配
datetime模块。
import datetime,calendarnow = datetime.datetime.now()print(calendar.month(now.year, now.month))
- 月份参数必须是1‑12,超出抛ValueError。