如果您想知道某一天是星期几,某个月有多少个周末...那么,日历对您来说非常方便。您的办公桌有制作精美的日历,手机里也有日历,电脑里也有日历,随手可得。
但是,如果我们要在代码中处理日历,我们不可能自己查好,然后手动写到代码中,那样代码将会被写死,不合理,也很难维护。
在Python中提供了calendar模块,为我们对日历做处理提供了很多方法,使用起来非常方便。
一、打印一年的年历
代码语言:javascript复制# coding=utf-8
import calendar
print(calendar.calendar(3019, w=4, l=1, c=6, m=4))
运行结果:
代码语言:javascript复制 3019
January February March April
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
May June July August
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 1 2 3 4 5 6 1 2 3 4 1
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29
31 30 31
September October November December
Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun
1 2 3 4 5 1 2 3 1 2 3 4 5 6 7 1 2 3 4 5
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14 6 7 8 9 10 11 12
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21 13 14 15 16 17 18 19
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28 20 21 22 23 24 25 26
27 28 29 30 25 26 27 28 29 30 31 29 30 27 28 29 30 31
最开始就先打印一年的日历,主要是效果很明显,两行代码就能打印出年历。
calendar.calendar(year,w=2,l=1,c=6,w=3),返回一个字符串格式的年历。
year接收一个年份数字,可以是过去现在或未来,比如我这里打印的是1千年以后的3019年。
w表示个位天数相邻两天之间的间隔宽度(字符空格数),默认是2,在1号和2号中间有两个字符的空格,在10号和11号之间是1个空格,(当然是不换行的时候),同时当w是2时,周一至周日的英文缩写只有两个字母。w如果小于2,都是取默认值2,w如果大于2时,相邻两天的间隔也跟着增大,周一至周日的英文缩写为3个字母,当w到9时,周一至周日的英文不缩写,(最长的单词是9个字母)。
l表示每一个周占用的行数,默认是1,如果是2,则第一周和第二周中间会空一行,以此类推。小于1时,取1。
c表示并排的两个月之间的间隔宽度,默认是6。但是c不小于w。即当c值小于w时,c等于w。
m表示并排展示多少个月。默认是3,显示一排3个月,会显示4排。我们可以设置大于等于1的数,最多就是一排展示完12个月。m等于0会报错,小于0不打印日历。
默认情况下,一周的第一天(显示在最左边的)是星期一Monday。可以使用calendar.setfirstweekday(num)函数设置,给num传入0至6的整数,0到6依次表示星期一到星期日,传其他数报错。可以使用calendar.firstweekday()获取当前最左边的是星期几,返回值是0到6的整数。
另外,calendar.prcal(year,w=2,l=1,c=6, w=3)也是打印一年的年历,相当于print(calendar.calendar(year,w,l,c)),打印年历后不换行。
二、打印一个月的月历
代码语言:javascript复制import calendar
print("month: n", calendar.month(2019, 10, w=0, l=0))
# calendar.prmonth(2019, 10, w=0, l=0)
print("monthcalendar: ", calendar.monthcalendar(2019, 11))
# 返回两个数,这个月的第一天是星期几,这个月有多少天
print("monthrange: ", calendar.monthrange(2019, 10))
运行结果:
代码语言:javascript复制month:
October 2019
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
monthcalendar: [[0, 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, 0]]
monthrange: (1, 31)
calendar.month(year, month, w=2, l=1)返回指定年和月的月历。
w和l这两个参数和上面打印年历中的一样。
calendar.prmonth(year, month, w=2, l=1)也是打印月历,相当于print(calendar.month(year, month, w=2, l=1)),打印完成不换行。
calendar.monthcalendar(year,month)返回一个嵌套列表。每个子列表是一个星期的日期编号,在第一个周和最后一个周,如果不满7天,则补0,将子列表的长度补到7。
calendar.monthrange(year,month)返回一个元组,元组中有两个整数。第一个表示这个月的1号是星期几,第二个表示这个月有多少天。
三、calendar模块其他方法
代码语言:javascript复制import calendar
tupletime = (2020, 10, 1, 8, 30, 30)
print(calendar.timegm(tupletime))
print(calendar.weekday(2019, 12, 1))
print(calendar.isleap(2020))
print(calendar.leapdays(2019, 2021))
运行结果:
代码语言:javascript复制1601541030
6
True
1
calendar.timegm(tupletime)接受一个时间元组,返回时间戳,时间元组的值依次表示年、月、日、时、分、秒。
calendar.weekday(year,month,day)返回传入的日期是星期几。
calendar.isleap(year)返回传入的年是不是闰年,是返回True,否则为false。如2020年是闰年。
calendar.leapdays(start, end)返回start,end之间有多少个闰年,左闭右开区间。