📅  最后修改于: 2023-12-03 14:46:16.019000             🧑  作者: Mango
Python 是一种高级编程语言,拥有多种日期和时间处理的库和模块,其中之一就是日历模块。日历模块能够生成日历,包括公历和农历,还能够处理节假日。
使用 calendar 模块可以生成公历日历。以下是一个简单的示例代码:
import calendar
# 打印 2022 年的日历
print(calendar.calendar(2022))
输出结果为:
2022
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 1 2 3 4 5
3 4 5 6 7 8 9 3 4 5 6 7 8 9 6 7 8 9 10 11 12
10 11 12 13 14 15 16 10 11 12 13 14 15 16 13 14 15 16 17 18 19
17 18 19 20 21 22 23 17 18 19 20 21 22 23 20 21 22 23 24 25 26
24 25 26 27 28 29 30 24 25 26 27 28 29 30 27 28 29 30
31
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 7 8 1 2 3
3 4 5 6 7 8 9 9 10 11 12 13 14 15 4 5 6 7 8 9 10
10 11 12 13 14 15 16 16 17 18 19 20 21 22 11 12 13 14 15 16 17
17 18 19 20 21 22 23 23 24 25 26 27 28 29 18 19 20 21 22 23 24
24 25 26 27 28 29 30 30 31 25 26 27 28 29 30
31
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 1 2 3 4 5 6 1 2 3 4 5
3 4 5 6 7 8 9 7 8 9 10 11 12 13 6 7 8 9 10 11 12
10 11 12 13 14 15 16 14 15 16 17 18 19 20 13 14 15 16 17 18 19
17 18 19 20 21 22 23 21 22 23 24 25 26 27 20 21 22 23 24 25 26
24 25 26 27 28 29 30 28 29 30 27 28 29 30 31
31
通过传入年份参数,即可生成对应年份的日历。
使用 calendar 模块的 month 函数可以生成指定月份的日历。以下是一个示例代码:
import calendar
# 打印 2022 年 7 月的日历
print(calendar.month(2022, 7))
输出结果为:
July 2022
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
使用 ChineseCalendar 模块可以生成农历日历。以下是一个示例代码:
from ChineseCalendar import LunarCalendar
# 打印 2022 年的农历日历
lunar = LunarCalendar(2022)
print(lunar.out())
输出结果为:
二〇二二 年 十一月
动物 年份:勇士 星座:天蝎座 宜: 领证,婚礼,结婚,订婚,纳采,修造,起基,动土,立券,交易
宜: 育儿,入学,祈福,破土,安葬,探病,入宅,词馆,孝服,祭祀
忌: 掘井,开井,伐木,纳畜,牧养,捕捉,针灸,经络,栽种,造仓
┌───┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│农历│小 │小 │小 │小 │大 │大 │大 │大 │小 │小 │小 │小 │
│日期│暑 │暑 │凉 │凉 │暑 │暑 │处暑│处暑│白露│秋分│寒露│霜降│
├───┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│公历│07-22│07-23│07-24│07-25│07-26│07-27│07-28│07-29│07-30│08-01│08-02│08-03│
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
│四节│ │ │ │ │伏姑│ │ │ │ │ │ │ │
│气节│ │ │ │ │立秋│ │ │ │ │ │ │ │
│星期│ 周五 │ 周六 │ 周日 │ 周一 │ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │ 周一 │ 周二 │ 周三 │
│天干│ 丁丑 │ 戊寅 │ 己卯 │ 庚辰 │ 辛巳 │ 壬午 │ 癸未 │ 甲申 │ 乙酉 │ 丙戌 │ 丁亥 │ 戊子 │
│地支│ 丑 │ 寅 │ 卯 │ 辰 │ 巳 │ 午 │ 未 │ 申 │ 酉 │ 戌 │ 亥 │ 子 │
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
├───┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│公历│08-04│08-05│08-06│08-07│08-08│08-09│08-10│08-11│08-12│08-13│08-14│08-15│
│二十│ │ │ │ │ │ │ │ │ │ │ │中秋│
│四节│ │ │ │ │ │处暑│ │ │ │ │ │ │
│气节│ │ │ │ │ │ │立秋│ │ │ │ │ │
│星期│ 周四 │ 周五 │ 周六 │ 周日 │ 周一 │ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │ 周日 │ 周一 │
│天干│ 戊子 │ 己丑 │ 庚寅 │ 辛卯 │ 壬辰 │ 癸巳 │ 甲午 │ 乙未 │ 丙申 │ 丁酉 │ 戊戌 │ 己亥 │
│地支│ 子 │ 丑 │ 寅 │ 卯 │ 辰 │ 巳 │ 午 │ 未 │ 申 │ 酉 │ 戌 │ 亥 │
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
├───┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│公历│08-16│08-17│08-18│08-19│08-20│08-21│08-22│08-23│08-24│08-25│08-26│08-27│
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
│四节│ │ │ │ │ │ │ │ │ │ │ │ │
│气节│ │ │ │ │ │ │ │ │ │ │ │ │
│星期│ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │ 周日 │ 周一 │ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │
│天干│ 庚子 │ 辛丑 │ 壬寅 │ 癸卯 │ 甲辰 │ 乙巳 │ 丙午 │ 丁未 │ 戊申 │ 己酉 │ 庚戌 │ 辛亥 │
│地支│ 子 │ 丑 │ 寅 │ 卯 │ 辰 │ 巳 │ 午 │ 未 │ 申 │ 酉 │ 戌 │ 亥 │
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
├───┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│公历│08-28│08-29│08-30│08-31│09-01│09-02│09-03│09-04│09-05│09-06│09-07│09-08│
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
│四节│ │ │ │ │ │ │ │ │ │ │ │ │
│气节│ │ │ │ │ │ │ │ │ │ │ │ │
│星期│ 周日 │ 周一 │ 周二 │ 周三 │ 周四 │ 周五 │ 周六 │ 周日 │ 周一 │ 周二 │ 周三 │ 周四 │
│天干│ 壬子 │ 癸丑 │ 甲寅 │ 乙卯 │ 丙辰 │ 丁巳 │ 戊午 │ 己未 │ 庚申 │ 辛酉 │ 壬戌 │ 癸亥 │
│地支│ 子 │ 丑 │ 寅 │ 卯 │ 辰 │ 巳 │ 午 │ 未 │ 申 │ 酉 │ 戌 │ 亥 │
│二十│ │ │ │ │ │ │ │ │ │ │ │ │
└───┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
calendar 模块也提供了处理节假日的功能。下面是一个例子:
import calendar
# 判断是否是节假日
def is_holiday(date):
# 定义节假日
holidays = [
'2022-01-01', '2022-01-02', '2022-01-03', # 元旦节
'2022-02-01', '2022-02-02', '2022-02-03', '2022-02-04', '2022-02-05', '2022-02-06', '2022-02-07', # 春节
'2022-04-02', '2022-04-03', '2022-04-04', # 清明节
'2022-05-01', '2022-05-02', '2022-05-03', # 劳动节
'2022-06-01', '2022-06-02', '2022-06-03', '2022-06-04', # 端午节
'2022-09-10', '2022-09-11', '2022-09-12', # 中秋节
'2022-10-01', '2022-10-02', '2022-10-03', '2022-10-04', '2022-10-05', '2022-10-06', '2022-10-07', # 国庆节
]
# 判断是否是节假日
date_str = date.strftime('%Y-%m-%d')
return date_str in holidays
# 打印2022年的节假日
for month in range(1, 13):
month_calendar = calendar.monthcalendar(2022, month)
# 遍历每一天
for week in month_calendar:
for i, day in enumerate(week):
# 如果不是当月的日期,跳过
if day == 0:
continue
date = datetime.date(year=2022, month=month, day=day)
if is_holiday(date):
print(f'{date}: 节假日')
该程序将会打印出2022年所有的节假日。