📜  python 日历 - Python (1)

📅  最后修改于: 2023-12-03 14:46:16.019000             🧑  作者: Mango

Python 日历

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年所有的节假日。