要生成月歷用Calendar.month(year,month),要按周組織日期用calendar().monthdatescalendar(year,month),判斷閏年用isleap(),獲取星期幾用weekday()。1. calendar.month(year, month)可生成類(lèi)似linux cal命令的文本月歷;2. 使用calendar.calendar().monthdatescalendar(year, month)可獲得按周組織的二維日期列表,適合數(shù)據(jù)處理;3. 判斷閏年使用calendar.isleap(year);4. 獲取某天星期幾使用calendar.weekday(year, month, day),返回0為周一,6為周日。
在 python 里,calendar 模塊雖然不像 datetime 那么常用,但它在處理日歷相關(guān)的任務(wù)時(shí)非常實(shí)用,特別是生成月歷。如果你只是想快速查看某個(gè)月的日期排布,或者需要將日期按照周來(lái)組織,這個(gè)模塊就能派上用場(chǎng)。
如何使用 calendar 模塊生成月歷
最簡(jiǎn)單的辦法是使用 calendar.month(year, month) 方法。它會(huì)返回一個(gè)字符串,表示指定年月的日歷,格式和 linux 系統(tǒng)下的 cal 命令輸出類(lèi)似。
比如:
import calendar print(calendar.month(2024, 10))
輸出大概是這樣的:
立即學(xué)習(xí)“Python免費(fèi)學(xué)習(xí)筆記(深入)”;
October 2024 Mo Tu We Th Fr Sa Su 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
這種格式適合直接打印到控制臺(tái)看,但不太方便做進(jìn)一步的數(shù)據(jù)處理。
如果你需要按周組織日期,該怎么操作?
如果你想拿到每個(gè)月的日期,并按周來(lái)組織,可以使用 calendar.Calendar 類(lèi)。它的 .monthdatescalendar(year, month) 方法會(huì)返回一個(gè)二維列表,每一子列表代表一周,包含 datetime.date 對(duì)象。
舉個(gè)例子:
import calendar from datetime import date cal = calendar.Calendar() weeks = cal.monthdatescalendar(2024, 10) for week in weeks: print([d.strftime('%Y-%m-%d') for d in week])
這樣你可以拿到完整的每周數(shù)據(jù),包括前后月份補(bǔ)全的日期(例如9月30號(hào)可能出現(xiàn)在10月第一周)。如果你只想要屬于當(dāng)前月份的日期,可以在遍歷時(shí)加個(gè)判斷:
for week in weeks: current_month_days = [d for d in week if d.month == 10] print(current_month_days)
其他實(shí)用功能:判斷閏年、獲取星期幾等
除了生成功能,calendar 還有一些小工具函數(shù)挺有用:
- calendar.isleap(year):判斷是否是閏年
- calendar.weekday(year, month, day):返回當(dāng)天是星期幾(0 是周一,6 是周日)
- calendar.day_name 和 calendar.month_name:可以直接訪問(wèn)星期名和月份名(注意這些是列表,索引從0開(kāi)始)
比如:
print(calendar.day_name[0]) # 輸出 Monday print(calendar.month_name[10]) # 輸出 October
不過(guò)要注意的是,這些名字默認(rèn)是英文的。如果你需要中文或其他語(yǔ)言,就得自己映射。
總結(jié)一下怎么選方法
- 要顯示文本日歷 → 用 calendar.month()
- 要處理每周數(shù)據(jù) → 用 Calendar().monthdatescalendar()
- 判斷閏年或星期幾 → 用 isleap() 或 weekday()
基本上就這些。雖然功能不多,但對(duì)一些簡(jiǎn)單的需求來(lái)說(shuō),calendar 模塊已經(jīng)夠用了,而且不用額外安裝依賴(lài)。