网易首页 > 网易号 > 正文 申请入驻

Python 库手册:calendar 日历模块

0
分享至

calendar 是 Python 的标准库模块之一,用于处理历法计算、生成日历表、判断闰年等操作。它封装了对阳历(格里历)的常见操作,便于开发中生成结构化日历、查询日期分布等。

常见应用场景:

(1)打印整月或整年的日历(控制排版格式)。

(2)查询某天是星期几。

(3)判断某年是否为闰年。

(4)获取某月有多少天。

(5)生成嵌套结构用于 GUI 日历、数据标注日历等.

◆ ◆

核心概念

1、Python 中的星期起始日默认为星期一(0)。

2、calendar 支持自定义星期起始日(如设置为星期天)。

3、模块中的 TextCalendar 和 HTMLCalendar 类提供了两种输出格式(纯文本与 HTML)。

4、所有月份按数字(1 ~ 12)处理,星期也为数字(0 ~ 6)。

◆ ◆

应用举例

例 1: 打印指定年份的年历(文本格式)

import calendar

print(calendar.calendar(2025))

例 2:打印指定月份的月历

import calendar

print(calendar.month(2025, 7))

例 3:获取一个月的所有星期分布(用于数据展示)

import calendar

cal = calendar.Calendar(firstweekday=0)  # 星期一为起始
for week in cal.monthdayscalendar(2025, 7):
    print(week)
    
# 每周是一个列表,0 表示该位置不是当月的有效日期(用于对齐)

例 4:判断闰年与获取每月天数

import calendar

print("2024 是闰年吗?", calendar.isleap(2024))  # True
print("2025 年 7 月有几天?", calendar.monthrange(2025, 7)[1])  # 31

例 5:查询某天是星期几

import calendar

# 返回值范围 0~6,表示星期一到星期日
day_of_week = calendar.weekday(2025, 7, 15)
print("2025-07-15 是星期:", day_of_week)  # 输出 1,即星期二

◆ ◆

常用函数速览

calendar.calendar(year, w=2, l=1, c=6)

返回整年日历的多行字符串表示。

参数

year:年份

w:每个日期字段宽度

l:每周所占行数

c:每个月之间的间距

返回:字符串(适合打印)

calendar.firstweekday()

返回当前设置的星期起始日。默认 0 表示星期一。

calendar.isleap(year)

判断给定年份是否为闰年。

参数:year 整数年份

返回:布尔值(True 或 False)

calendar.leapdays(y1, y2)

计算从年份 y1(含)到 y2(不含)之间的闰年数。

calendar.month(year, month, w=2, l=1)

返回指定月份的日历字符串表示。

参数

year:年份

month:月份

w:日期宽度

l:行距

返回:字符串(适合打印)

calendar.monthcalendar(year, month)

返回一个嵌套列表,表示该月日历的每周安排。

每周是一个包含 7 个元素的列表,0 表示该位置无效(不是该月的日期)。

返回:List[List[int]]

calendar.monthrange(year, month)

返回该月的起始星期与天数。

返回: (weekday, num_days),比如:(2, 31) 表示该月从星期三开始,有 31 天

calendar.setfirstweekday(weekday)

设置星期的起始日(0=周一,6=周日)。

参数:weekday 为整数

返回:None

calendar.weekday(year, month, day)

返回指定日期是星期几(0=周一,6=周日)。

calendar.TextCalendar

该类用于以纯文本格式生成日历,可自定义起始星期,适合在命令行界面、日志、控制台等环境展示。

构造方法:

calendar.TextCalendar(firstweekday=0)
# 参数 firstweekday:设置每周的起始日(0 表示星期一,6 表示星期日)
# 默认值为 0,即以周一开始

常用方法:

(1)formatmonth(year, month, w=2, l=1)

返回指定年月的文本格式月历字符串。

from calendar import TextCalendar
tc = TextCalendar()
print(tc.formatmonth(2025, 7))

(2)formatyear(year, w=2, l=1, c=6, m=3)

返回整年文本格式日历,按列排布。

(3)prmonth(year, month)

直接打印某月日历(等同于 print(formatmonth(...)))。

(4)pryear(year)

直接打印整年日历。

calendar.HTMLCalendar

该类用于以 HTML 表格格式生成日历,适用于 Web 前端展示、日报系统、数据标注平台等。

构造方法:

calendar.HTMLCalendar(firstweekday=0)

与 TextCalendar 相同,设置每周起始日。

常用方法:

(1)formatmonth(year, month)

返回 HTML 表格代码,表示指定月历。

from calendar import HTMLCalendar

hc = HTMLCalendar()
html_code = hc.formatmonth(2025, 7)
print(html_code)

(2)formatyear(year, width=3)

返回整年 HTML 日历代码,width 表示每行显示几个月(默认 3)。

(3)子类可重写的方法(高级定制)

你可以继承 HTMLCalendar 类,重写以下方法以定制样式或内容:

formatday(day, weekday)

formatweek(theweek)

formatmonthname(year, month, withyear=True)

这在自定义工作日高亮、节假日标记等方面非常有用。

◆ ◆

使用建议

1、日历数据展示推荐用 monthcalendar() 或 Calendar().monthdayscalendar() 输出结构化信息。

2、打印格式可用 calendar.month() 或 TextCalendar 控制样式。

3、若需要国际化日历、支持节假日,建议结合 datetime 或第三方库 holidays。

点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
中甲太激烈!陕西与南通已超去年中超多队身价:10队冲超!

中甲太激烈!陕西与南通已超去年中超多队身价:10队冲超!

邱泽云
2026-02-21 19:17:14
贿赂安保,中国导游十年用同一张门票进卢浮宫

贿赂安保,中国导游十年用同一张门票进卢浮宫

凯利经济观察
2026-02-20 11:43:34
“先打四角酒来”,在宋代四角酒是多少斤?不得不佩服古人的酒量

“先打四角酒来”,在宋代四角酒是多少斤?不得不佩服古人的酒量

老踝是个手艺人
2026-02-13 14:28:19
王濛表态:只要祖国需要,我随时到场,敢签保2块金牌的生死状

王濛表态:只要祖国需要,我随时到场,敢签保2块金牌的生死状

风过乡
2026-02-21 09:09:53
22岁美女揽2金1铜 韩国队追上来了:奖牌榜连升2名 只差中国队1名

22岁美女揽2金1铜 韩国队追上来了:奖牌榜连升2名 只差中国队1名

风过乡
2026-02-21 07:18:31
59岁宋祖英现身活动状态惊艳!短发利落大气,黑色套装优雅端庄

59岁宋祖英现身活动状态惊艳!短发利落大气,黑色套装优雅端庄

琴声飞扬
2026-02-12 11:51:25
11年恩爱抵不过残酷现实,32岁昆凌青春正盛,奔50周杰伦年老力衰

11年恩爱抵不过残酷现实,32岁昆凌青春正盛,奔50周杰伦年老力衰

小熊侃史
2026-01-29 07:20:07
京东和美团打架,打着打着,饿了么却没了。

京东和美团打架,打着打着,饿了么却没了。

流苏晚晴
2026-02-21 12:59:39
是什么让15万将士对安禄山死心塌地?三大原因,揭开乱世枭雄的底牌

是什么让15万将士对安禄山死心塌地?三大原因,揭开乱世枭雄的底牌

寄史言志
2026-01-21 18:39:10
1967年,那个将垃圾桶扣在彭老总头上的开国中将,后来怎么样了?

1967年,那个将垃圾桶扣在彭老总头上的开国中将,后来怎么样了?

海佑讲史
2026-02-19 12:50:05
44岁梅根“真面目”曝光!非裔遗传特征明显,莉莉贝特基因突变了

44岁梅根“真面目”曝光!非裔遗传特征明显,莉莉贝特基因突变了

夜深爱杂谈
2026-02-19 21:39:46
爱泼斯坦在巴黎的帝国,全靠这个女人一手打造?

爱泼斯坦在巴黎的帝国,全靠这个女人一手打造?

新欧洲
2026-02-20 20:12:38
尾矿库藏4万亿,股价仅2元!包钢股份,市场在装睡吗?

尾矿库藏4万亿,股价仅2元!包钢股份,市场在装睡吗?

慧眼看世界哈哈
2026-02-21 14:17:45
总领馆:贝加尔湖事故幸存者身体状况良好!当地提前回暖,温度破百年纪录;目击者:幸存男子坐在后排,在车辆入水瞬间冲出

总领馆:贝加尔湖事故幸存者身体状况良好!当地提前回暖,温度破百年纪录;目击者:幸存男子坐在后排,在车辆入水瞬间冲出

每日经济新闻
2026-02-21 20:45:08
利润很吓人但很冷门的生意!越是穷的时候越要尝试野路子~

利润很吓人但很冷门的生意!越是穷的时候越要尝试野路子~

另子维爱读史
2026-01-13 21:51:51
985女硕士被活活饿死,父母:不会给她收尸,就让她死在日本吧!

985女硕士被活活饿死,父母:不会给她收尸,就让她死在日本吧!

来科点谱
2026-02-18 07:11:56
掘金82分胜开拓者,约基奇首节19分穆雷次节15分

掘金82分胜开拓者,约基奇首节19分穆雷次节15分

张辱卤说体育
2026-02-21 12:30:03
初六6不出,到头一场空”,大年初六,6不出是指啥?不要犯忌讳

初六6不出,到头一场空”,大年初六,6不出是指啥?不要犯忌讳

刺头体育
2026-02-21 16:34:59
爆:中国电信员工晒2025年终奖工资单!

爆:中国电信员工晒2025年终奖工资单!

通信头条
2026-02-20 20:42:28
笑死,一只19岁的狸花猫连干6个英国首相,火遍全球!网友狂赞:好牛的猫!

笑死,一只19岁的狸花猫连干6个英国首相,火遍全球!网友狂赞:好牛的猫!

猫咪爱上喵星人
2026-02-15 23:05:05
2026-02-22 00:24:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1761文章数 77关注度
往期回顾 全部

科技要闻

智谱上市1月涨5倍,市值超越京东、快手

头条要闻

美军战机选在大年初二挑衅解放军 韩国防长抗议了

头条要闻

美军战机选在大年初二挑衅解放军 韩国防长抗议了

体育要闻

徐梦桃:这是我第一块铜牌 给我换个吉祥物

娱乐要闻

黄晓明澳门赌博输十几亿 本人亲自回应

财经要闻

一觉醒来,世界大变,特朗普改新打法了

汽车要闻

比亚迪的“颜值担当”来了 方程豹首款轿车路跑信息曝光

态度原创

健康
艺术
旅游
亲子
教育

转头就晕的耳石症,能开车上班吗?

艺术要闻

历时144年,全球最高的教堂正式封顶!

旅游要闻

一游客在北帝山景区栈道与山体衔接处滑落,广西贵港平南县通报情况

亲子要闻

中韩宝宝得要从小灌输中国文化 真正的年味是什么?

教育要闻

就业数据:未落实毕业去向5032人!太吓人!

无障碍浏览 进入关怀版