千家信息网

Python标准库calendar怎么使用

发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要介绍"Python标准库calendar怎么使用",在日常操作中,相信很多人在Python标准库calendar怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2024年09月21日Python标准库calendar怎么使用

这篇文章主要介绍"Python标准库calendar怎么使用",在日常操作中,相信很多人在Python标准库calendar怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Python标准库calendar怎么使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

此模块允许你输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。值得注意的是,默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天(欧洲惯例)。不过,我们可以使用setfirstweekday()方法来设置一周的第一天为星期日或h者其他工作日,指定的日期以整数形式给出。

calendar模块主要由Calendar类与一些模块方法构成,Calendar类又衍生了一些子孙类来帮助我们实现一些特殊的功能

Calendar

模块方法

setfirstweekday(firstweekday):指定一周的第一天,0是星期一,…,6为星期日

import calendar# 将星期日设置为一周第一天calendar.setfirstweekday(firstweekday=6)

firstweekday():返回一周的第一天,0是星期一,…,6为星期日

import calendar# 将星期日设置为一周第一天calendar.setfirstweekday(firstweekday=6)print(calendar.firstweekday())      # 6

isleap(year):判断指定是否是闰年,闰年为True,平年为False

import calendar# 2018年是平年,所以为Falseprint(calendar.isleap(2018))        # False# 2008年是如年,所以为Trueprint(calendar.isleap(2008))        # True

leapdays(y1, y2):返回y1与y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年:

import calendar# 2008到2011之间只有2008年是闰年,所以数量为1print(calendar.leapdays(2008, 2011))    # 1

weekday(year, month, day):获取指定日期为星期几

import calendar# 2018-08-08正是星期三,千万别忘记2代表的是星期三print(calendar.weekday(2018, 8, 8))     # 2

weekheader(n):返回包含星期的英文缩写,n表示英文缩写所占的宽度

import calendarprint(calendar.weekheader(4))############### 打印结果如下 ###############Mon  Tue  Wed  Thu  Fri  Sat  Sun

monthrange(year, month):返回一个由一个月第一个天的星期与当前月的天数组成的元组

import calendar# 查看日历可以知道,08-01正是星期三,并且8月共31天print(2018, 8)      # (2, 31)

monthcalendar(year, month):返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期

import calendarcalendar.setfirstweekday(firstweekday=6)print(calendar.monthcalendar(2018, 8))############### 打印结果如下 ###############[[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]]

prmonth(theyear, themonth, w=0, l=0):打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行

import calendarcalendar.setfirstweekday(firstweekday=6)calendar.prmonth(2018, 8)############### 打印结果如下 ###############    August 2018Su Mo Tu We Th Fr Sa          1  2  3  4 5  6  7  8  9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

month(theyear, themonth, w=0, l=0):返回一个月的日历的多行文本字符串。theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行

import calendarcalendar.setfirstweekday(firstweekday=6)print(calendar.month(2018, 8))############### 打印结果如下 ###############    August 2018Su Mo Tu We Th Fr Sa          1  2  3  4 5  6  7  8  9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

prcal(year, w=0, l=0, c=6, m=3):打印一年的日历,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列

import calendarcalendar.setfirstweekday(firstweekday=6)calendar.prcal(2018, m=4)############### 打印结果如下 ###############                                               2018      January                   February                   March                     AprilSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa    1  2  3  4  5  6                   1  2  3                   1  2  3       1  2  3  4  5  6  7 7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10       8  9 10 11 12 13 1414 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17      15 16 17 18 19 20 2121 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24      22 23 24 25 26 27 2828 29 30 31               25 26 27 28               25 26 27 28 29 30 31      29 30        May                       June                      July                     AugustSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa       1  2  3  4  5                      1  2       1  2  3  4  5  6  7                1  2  3  4 6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 1113 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1820 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2527 28 29 30 31            24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30 31     September                  October                   November                  DecemberSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa                   1          1  2  3  4  5  6                   1  2  3                         1 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 1516 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 2223 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 2930                                                                            30 31

calendar(year, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历,w每个单元格宽度,默认2,内部已做处理,最小宽度为2,l每列换l行,默认为1,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列

import calendarcalendar.setfirstweekday(firstweekday=6)print(calendar.calendar(2018, m=4))############### 打印结果如下 ###############                                               2018      January                   February                   March                     AprilSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa    1  2  3  4  5  6                   1  2  3                   1  2  3       1  2  3  4  5  6  7 7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10       8  9 10 11 12 13 1414 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17      15 16 17 18 19 20 2121 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24      22 23 24 25 26 27 2828 29 30 31               25 26 27 28               25 26 27 28 29 30 31      29 30        May                       June                      July                     AugustSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa       1  2  3  4  5                      1  2       1  2  3  4  5  6  7                1  2  3  4 6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 1113 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1820 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2527 28 29 30 31            24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30 31     September                  October                   November                  DecemberSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa                   1          1  2  3  4  5  6                   1  2  3                         1 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 1516 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 2223 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 2930

calendar.Calendar(firstweekday=0)类

firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

iterweekdays():获取一周的数字的迭代器,迭代器的第一个值与firstweekday的值相同

from calendar import Calendarc = Calendar()print(list(c.iterweekdays()))       # [0, 1, 2, 3, 4, 5, 6]-->代表星期一至星期日,0为星期一,即一周的第一天c = Calendar(firstweekday=6)print(list(c.iterweekdays()))       # [6, 0, 1, 2, 3, 4, 5]-->代表星期日至星期六,6为星期日,即一周的第一天

itermonthdates(year, month):获取一个月日期的迭代器,此迭代器会返回指定月份的所有日期,包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.itermonthdates(2018, 8):    print(item)############### 打印结果如下 ###############2018-07-292018-07-302018-07-312018-08-01...2018-08-312018-09-01

可以看出,2018-07-29、2018-07-30、2018-07-31正是8月份开始的那一周的日期,而2018-09-01为8月份结束的那一周的日期,8月份所有的日期全部获取得到!另外注意的是,这里的日期为datatime.date类型!另外,请将星期天设置为一周的第一天,否则将无法直观显示其作用!

itermonthdays(year, month):返回一个月天数的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字,包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.itermonthdays(2018, 8):    print(item)############### 打印结果如下 ###############0001...310

因为2018-07-29、2018-07-30、2018-07-31、2018-09-01不是指定月份的日期,所以为0

itermonthdays2(year, month):返回一个月天数与星期的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字与星期几所代表的数字组成的元组,包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.itermonthdays2(2018, 8):    print(item)############### 打印结果如下 ###############(0, 6)(0, 0)(0, 1)(1, 2)...(31, 4)(0, 5)

可以看出,2018-08-01正是星期三

monthdatescalendar(year, month):返回一个月日期列表,按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.monthdatescalendar(2018, 8):    print(item)############### 打印结果如下 ###############[datetime.date(2018, 7, 29), datetime.date(2018, 7, 30), datetime.date(2018, 7, 31), datetime.date(2018, 8, 1), datetime.date(2018, 8, 2), datetime.date(2018, 8, 3), datetime.date(2018, 8, 4)][datetime.date(2018, 8, 5), datetime.date(2018, 8, 6), datetime.date(2018, 8, 7), datetime.date(2018, 8, 8), datetime.date(2018, 8, 9), datetime.date(2018, 8, 10), datetime.date(2018, 8, 11)][datetime.date(2018, 8, 12), datetime.date(2018, 8, 13), datetime.date(2018, 8, 14), datetime.date(2018, 8, 15), datetime.date(2018, 8, 16), datetime.date(2018, 8, 17), datetime.date(2018, 8, 18)][datetime.date(2018, 8, 19), datetime.date(2018, 8, 20), datetime.date(2018, 8, 21), datetime.date(2018, 8, 22), datetime.date(2018, 8, 23), datetime.date(2018, 8, 24), datetime.date(2018, 8, 25)][datetime.date(2018, 8, 26), datetime.date(2018, 8, 27), datetime.date(2018, 8, 28), datetime.date(2018, 8, 29), datetime.date(2018, 8, 30), datetime.date(2018, 8, 31), datetime.date(2018, 9, 1)]

可以看出,打印出来的第一个值为第一周的日期列表,其中还包含了2018-07-29、2018-07-30、2018-07-31三天

monthdayscalendar(year, month):返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.monthdayscalendar(2018, 8):    print(item)############### 打印结果如下 ###############[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]

monthdays2calendar(year, month):返回一个月中天数与星期的列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.monthdays2calendar(2018, 8):    print(item)############### 打印结果如下 ###############[(0, 6), (0, 0), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5)][(5, 6), (6, 0), (7, 1), (8, 2), (9, 3), (10, 4), (11, 5)][(12, 6), (13, 0), (14, 1), (15, 2), (16, 3), (17, 4), (18, 5)][(19, 6), (20, 0), (21, 1), (22, 2), (23, 3), (24, 4), (25, 5)][(26, 6), (27, 0), (28, 1), (29, 2), (30, 3), (31, 4), (0, 5)]

yeardatescalendar(year, width=3):返回一年中所有的日期,为一个4维数组。width表示将一年中12个月份进行划分,每width个月为一份,每一份包含各个月份,每个月份包含周,每周包含日期信息。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.yeardatescalendar(2018, 3):    print(item)############### 打印结果如下 ###############[[[datetime.date(2017, 12, 31), datetime.date(2018, 1, 1), datetime.date(2018, 1, 2),...]]][[[datetime.date(2018, 4, 1), datetime.date(2018, 4, 2), datetime.date(2018, 4, 3),...]]][[[datetime.date(2018, 7, 1), datetime.date(2018, 7, 2), datetime.date(2018, 7, 3),...]]][[[datetime.date(2018, 9, 30), datetime.date(2018, 10, 1), datetime.date(2018, 10, 2),...]]]

yeardayscalendar(year, width=3):返回一年中每个月的天数,为一个4维数组。width表示将一年中12个月份进行划分,每width个月为一份;每一份包含各个月份,每个月份包含周,每周包含天数信息(不是当前月份的天数为0)。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.yeardayscalendar(2018, 3):    print(item)############### 打印结果如下 ###############[[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], ...]]][[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], ...]]][[[1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], ...]]][[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], ...]]]

yeardays2calendar(year, width=3):返回一年中农每个月的天数与星期的元组,为一个4维的元组列表。width表示将一年中12个月份进行划分,每width个月为一份;每一份包含各个月份,每个月份包含周,每周包含天数与星期的元组信息(不是当前月份的天数为0)。包括月份开始那周的所有日期和月份结束那周的所有日期

from calendar import Calendarc = Calendar(firstweekday=6)for item in c.yeardays2calendar(2018, 3):    print(item)############### 打印结果如下 ###############[[[(0, 6), (1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5)], [(7, 6), (8, 0), ...]]][[[(1, 6), (2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5)], [(8, 6), (9, 0), ...]]][[[(1, 6), (2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5)], [(8, 6), (9, 0), ...]]][[[(0, 6), (1, 0), (2, 1), (3, 2), (4, 3), (5, 4), (6, 5)], [(7, 6), (8, 0), ...]]]

calendar.TextCalendar(firstweekday=0)

Calendar子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

formatmonth(theyear, themonth, w=0, l=0):以多行字符串形式返回一个月的日历。theyear指定年,themonth指定月,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行

from calendar import TextCalendarc = TextCalendar(firstweekday=6)print(c.formatmonth(2018, 8))############### 打印结果如下 ###############    August 2018Su Mo Tu We Th Fr Sa          1  2  3  4 5  6  7  8  9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

prmonth(theyear, themonth, w=0, l=0):打印formatmonth(theyear, themonth, w=0, l=0)的结果,无返回值

from calendar import TextCalenadrc = TextCalendar(firstweekday=6)c.prmonth(2018, 8)############### 打印结果如下 ###############    August 2018Su Mo Tu We Th Fr Sa          1  2  3  4 5  6  7  8  9 10 1112 13 14 15 16 17 1819 20 21 22 23 24 2526 27 28 29 30 31

因为无返回值,所以返回的结果为None

formatyear(theyear, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行,c月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列

from calendar import TextCalendarc = TextCalendar(firstweekday=6)print(c.format(2018, m=4))############### 打印结果如下 ###############                                               2018      January                   February                   March                     AprilSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa    1  2  3  4  5  6                   1  2  3                   1  2  3       1  2  3  4  5  6  7 7  8  9 10 11 12 13       4  5  6  7  8  9 10       4  5  6  7  8  9 10       8  9 10 11 12 13 1414 15 16 17 18 19 20      11 12 13 14 15 16 17      11 12 13 14 15 16 17      15 16 17 18 19 20 2121 22 23 24 25 26 27      18 19 20 21 22 23 24      18 19 20 21 22 23 24      22 23 24 25 26 27 2828 29 30 31               25 26 27 28               25 26 27 28 29 30 31      29 30        May                       June                      July                     AugustSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa       1  2  3  4  5                      1  2       1  2  3  4  5  6  7                1  2  3  4 6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 1113 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1820 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2527 28 29 30 31            24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30 31     September                  October                   November                  DecemberSu Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa      Su Mo Tu We Th Fr Sa                   1          1  2  3  4  5  6                   1  2  3                         1 2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10       2  3  4  5  6  7  8 9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17       9 10 11 12 13 14 1516 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24      16 17 18 19 20 21 2223 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30         23 24 25 26 27 28 2930                                                                            30 31

pryear(theyear, w=2, l=1, c=6, m=3):将formatyear(theyear, w=2, l=1, c=6, m=3)的结果作为返回

calendar.HTMLCalendar(firstweekday=0)

Calendar的子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

formatmonth(theyear, themonth, withyear=Ture):返回一个月日历的html内容,withyear是否显示年份,默认为True,即显示年份

from calendar import HTMLCalendarc = HTMLCalendar(firstweekday=6)print(c.formatmonth(2018, 8, withyear=False))############### 打印结果如下 ###############
August
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
262728293031 

formatyear(theyear, width=3):返回一年日历的html内容,width表示将12个月分为width列

from calendar import HTMLCalendarc = HTMLCalendar(firstweekday=6)print(c.formatyear(2018, width=4))

formatyearpage(theyear, width=3, css='calendar.css', encoding=None):返回一年日历的html内容,width表示将12个月分为width列,css可自定义css样式,encoding编码方式

from calendar import HTMLCalendarc = HTMLCalendar(firstweekday=6)print(c.formatyearpage(2018, width=4))

到此,关于"Python标准库calendar怎么使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0