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

calendar模块中提供了三大类:

  1. calendar.Calendar(firstweekday=0)
      该类提供了许多生成器,如星期的生成器,某月日历生成器。
  2. calendar.TextCalendar(firstweekday=0)
      该类提供了按月、按年生成日历字符串的方法。
  3. calendar.HTMLCalendar(firstweekday=0)
      类似TextCalendar,不过生成的是HTML格式的日历。

calendar 库解析

调用方法:import calendar

  1. setfirstweekday(firstweekday):指定一周的第一天,0是星期一,…,6为星期日
>>>  import calendar
# 将星期日设置为一周第一天
>>> calendar.setfirstweekday(firstweekday=6)
  1. firstweekday():返回一周的第一天,0是星期一,…,6为星期日
>>> import calendar
# 将星期日设置为一周第一天
>>> calendar.setfirstweekday(firstweekday=6)
>>> print(calendar.firstweekday())
6
  1. isleap(year):判断指定是否是闰年,闰年为True,平年为False
>>> import calendar
>>> print(calendar.isleap(2019))
False
>>> print(calendar.isleap(2020))
True
  1. leapdays(y1, y2):返回y1与y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年
>>> import calendar
>>> print(calendar.leapdays(2000, 2019))
5
  1. weekday(year, month, day):获取指定日期为星期几
>>> import calendar
# 2018-04-09正是星期二,千万别忘记1代表的是星期二
>>> print(calendar.weekday(2019,4,9))
1
  1. weekheader(n):返回包含星期的英文缩写,n表示英文缩写所占的宽度
>>> import calendar
>>> print(calendar.weekheader(4))
Sun  Mon  Tue  Wed  Thu  Fri  Sat
  1. monthrange(year, month):返回一个由一个月第一个天的星期与当前月的天数组成的元组
>>> import calendar
# 查看日历可以知道,04-01是星期一,且4月共30天
>>> print(calendar.monthrange(2019,4))
(0, 30)
  1. monthcalendar(year, month):返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期
>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> print(calendar.monthcalendar(2019,4))
[[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, 0, 0, 0, 0]]
  1. prmonth(theyear, themonth, w=0, l=0):打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度(默认为0,内部已做处理,最小宽度为2),l每列换l行(默认为0,内部已做处理,至少换行1行)
>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> calendar.prmonth(2019,4)
     April 2019
Su Mo Tu We Th Fr Sa
    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
  1. month(theyear, themonth, w=0, l=0):返回一个月的日历的多行文本字符串。theyear指定年份,themonth指定月份,w每个单元格宽度(默认0,内部已做处理,最小宽度为2),l每列换l行(默认为0,内部已做处理,至少换行1行)
>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> calendar.prmonth(2019,4)
     April 2019
Su Mo Tu We Th Fr Sa
    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
  1. prcal(year, w=0, l=0, c=6, m=3):打印一年的日历,w每个单元格宽度(默认0,内部已做处理,最小宽度为2),l每列换l行(默认为0,内部已做处理,至少换行1行),c表示月与月之间的间隔宽度(默认为6,内部已做处理,最小宽度为2),m表示将12个月分为m列
>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> print(calendar.prcal(2019, m=4))
                                               2019

      January                   February                   March                     April
Su 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          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28            24 25 26 27 28 29 30      28 29 30
                                                    31

        May                       June                      July                     August
Su 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                         1          1  2  3  4  5  6                   1  2  3
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30 31
                          30

     September                  October                   November                  December
Su 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  7             1  2  3  4  5                      1  2       1  2  3  4  5  6  7
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28
29 30                     27 28 29 30 31            24 25 26 27 28 29 30      29 30 31
None
  1. calendar(year, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历,w每个单元格宽度(默认2,内部已做处理,最小宽度为2),l每列换l行(默认为1,内部已做处理,至少换行1行),c表示月与月之间的间隔宽度(默认为6,内部已做处理,最小宽度为2),m表示将12个月分为m列
>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> print(calendar.calendar(2019, m=4))
                                               2019

      January                   February                   March                     April
Su 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          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28            24 25 26 27 28 29 30      28 29 30
                                                    31

        May                       June                      July                     August
Su 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                         1          1  2  3  4  5  6                   1  2  3
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13       4  5  6  7  8  9 10
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20      11 12 13 14 15 16 17
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27      18 19 20 21 22 23 24
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31               25 26 27 28 29 30 31
                          30

     September                  October                   November                  December
Su 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  7             1  2  3  4  5                      1  2       1  2  3  4  5  6  7
 8  9 10 11 12 13 14       6  7  8  9 10 11 12       3  4  5  6  7  8  9       8  9 10 11 12 13 14
15 16 17 18 19 20 21      13 14 15 16 17 18 19      10 11 12 13 14 15 16      15 16 17 18 19 20 21
22 23 24 25 26 27 28      20 21 22 23 24 25 26      17 18 19 20 21 22 23      22 23 24 25 26 27 28
29 30                     27 28 29 30 31            24 25 26 27 28 29 30      29  30 31

发表评论

邮箱地址不会被公开。