calendar,是与日历相关的模块,calendar文件里定义了很多类型,主要有Calendar,TextCalendar以及HTMLCalendar类型。其中,Calendar是TextCalendar与HTMLCalendar的基类。该模块文件还对外提供了很多方法,例如:calendar,month,prcal,prmonth之类的方法。本文主要对calendar模块的方法进行介绍
1.日历打印
1.1calendar()方法
返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
import calendar
print(calendar.calendar(2021, w=2, l=1, c=6))
result:
2021
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 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 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 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 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 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
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 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
1.2 month()方法
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
print(calendar.month(2021, 12, w=2, l=1))
result:
December 2021
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
1.3 prcal()方法
相当于print(calendar.calendar())
calendar.prcal(2021, w=2, l=1, c=6)
result:
2021
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 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28
25 26 27 28 29 30 31 29 30 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 3 4 1 2 1 2 3 4 5 6
5 6 7 8 9 10 11 3 4 5 6 7 8 9 7 8 9 10 11 12 13
12 13 14 15 16 17 18 10 11 12 13 14 15 16 14 15 16 17 18 19 20
19 20 21 22 23 24 25 17 18 19 20 21 22 23 21 22 23 24 25 26 27
26 27 28 29 30 24 25 26 27 28 29 30 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 3 4 1 1 2 3 4 5
5 6 7 8 9 10 11 2 3 4 5 6 7 8 6 7 8 9 10 11 12
12 13 14 15 16 17 18 9 10 11 12 13 14 15 13 14 15 16 17 18 19
19 20 21 22 23 24 25 16 17 18 19 20 21 22 20 21 22 23 24 25 26
26 27 28 29 30 31 23 24 25 26 27 28 29 27 28 29 30
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 3 1 2 3 4 5 6 7 1 2 3 4 5
4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
25 26 27 28 29 30 31 29 30 27 28 29 30 31
1.4 prmonth()方法
相当于print(calendar.month())
calendar.prmonth(2021, 12, w=2, l=1)
result:
December 2021
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
2. 闰年判断
2.1 isleap()方法
是闰年返回True,否则为False
print(calendar.isleap(1900))
result:
False
print(calendar.isleap(2020))
result:
True
print(calendar.isleap(2019))
result:
False
print(calendar.isleap(2000))
result:
True
2.2 leapdays()方法
返回在起始年份和结束年份(不包括结束年份)之间的闰年总数。
print(calendar.leapdays(1949, 2021))
result:
18
注:leapdays后面两个参数,实际抽取时,不包含第二个参数。即第二个参数即使是闰年,也不做统计
print(calendar.leapdays(1949, 2024))
result:
18
这里的2024不被包含,事实上截止到2023年,所以即使2024年是闰年也不纳入计算,所以这里仍然和上面末尾为2021年的计算结果一致
3.星期相关
3.1 firstweekday()方法
返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一
print(calendar.firstweekday())
result:
0
3.2 monthcalendar()方法
返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
print(calendar.monthcalendar(2021, 12))
result:
[[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, 0]]
3.3 monthrange()方法
返回两个整数。第一个是该月的第一天是星期几,第二个是该月总共有多少天
print(calendar.monthrange(2021, 12))
result:
(2, 31)
3.4 setfirstweekday()方法
设置每周的起始日期为星期几
print(f'设置前:{calendar.firstweekday()}')
calendar.setfirstweekday(5)
print(f'设置后:{calendar.firstweekday()}')
result:
设置前:0
设置后:5
注:此处设置后关闭IDLE后重启,将恢复原样,0(星期一)到6(星期日)
3.5 weekday()方法
返回一个整数,表示给定的日期是星期几
print(calendar.weekday(2021, 12, 23))
result:
3
4.其他
4.1 timegm()方法
将时间元组转换成时间戳,与time.gtime()方法作用恰好相反
print(calendar.timegm((2021, 12, 23, 10, 13, 34)))
result:
1640254414
import time
print(time.gmtime(1640254414))
result:
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=23, tm_hour=10, tm_min=13, tm_sec=34, tm_wday=3, tm_yday=357, tm_isdst=0)