python的calendar模块有下面三个子类
Calendar
TextCalendar
HTMLCalendar
1,Calendar 日历
各个方法的返回值主要有两种类型:
(1)一种是迭代器(方法中含有iter (iteration(迭代)的缩写)的,通常返回迭代器)
(2)一种是list
迭代器或者list里面的构成元素主要有两种:
(1)一种int, 例如:星期0-6,日期0-31(0代表非指定月)
(2)一种datetime.date 例如:datetime.date(2019, 9, 30)
所以从方法名来猜测返回的类型
例如:monthdatescalendar(year,month) 返回list,其中日期类型为datetime.date,calendar代表返回形式要和日历一致,需要以一个星期的日期为一组
例如:monthdayscalendar(year,month) 返回list, 其中日期类型为int,calendar代表返回形式要和日历一致,需要以一个星期的日期为一组
下面这个是一个通常的日历
(1) iterweekdays:求一周的数字(也就是上面图片的红框部分的内容)
注意:0代表星期一,6代表星期日,python默认的每个星期是从0(星期一)开始
>>> from calendar import Calendar
>>> c = Calendar()
>>> type(c.iterweekdays())
<class 'generator'> #返回值是一个迭代器
>>> print(c.iterweekdays()) #迭代器是不能直接输出的
<generator object Calendar.iterweekdays at 0x039BBF30>
>>> print(list(c.iterweekdays())) #如果需要查看内容,可以转化成list或者直接循环
[0, 1, 2, 3, 4, 5, 6]
(2)itermonthdates(year,month):求一个月的日期(上图黄色部分)
注意:这个返回的时候是以这个月里面的所有周的日期(datetime.date类型)所以,虽然求的是10月份的日期,
但是头部的9-30和尾部的11-01到11-03也会返回回来。
>>> for item in c.itermonthdates(2019,10):
print(item)
[datetime.date(2019, 9, 30), datetime.date(2019, 10, 1), datetime.date(2019, 10, 2), datetime.date(2019, 10, 3), datetime.date(2019, 10, 4), datetime.date(2019, 10, 5), datetime.date(2019, 10, 6), datetime.date(2019, 10, 7), datetime.date(2019, 10, 8), datetime.date(2019, 10, 9), datetime.date(2019, 10, 10), datetime.date(2019, 10, 11), datetime.date(2019, 10, 12), datetime.date(2019, 10, 13), datetime.date(2019, 10, 14), datetime.date(2019, 10, 15), datetime.date(2019, 10, 16), datetime.date(2019, 10, 17), datetime.date(2019, 10, 18), datetime.date(2019, 10, 19), datetime.date(2019, 10, 20), datetime.date(2019, 10, 21), datetime.date(2019, 10, 22), datetime.date(2019, 10, 23), datetime.date(2019, 10, 24), datetime.date(2019, 10, 25), datetime.date(2019, 10, 26), datetime.date(2019, 10, 27), datetime.date(2019, 10, 28), datetime.date(2019, 10, 29), datetime.date(2019, 10, 30), datetime.date(2019, 10, 31), datetime.date(2019, 11, 1), datetime.date(2019, 11, 2), datetime.date(2019, 11, 3)]
(3)monthdatescalendar(year, month) : 求一个月的日历
yeardatescalendar(year):求一年的日历
PS:
<1>itermonthdates:指定月的所有日期,返回结果是datetime.date的迭代器
<2>monthdatescalendar:返回指定月的所有日期,以星期,日期分组,返回结果是datetime.date的list (二维)
<3>yeardatescalendar:返回指定年的日期,以三个月,月,星期,日期分组,返回结果是datetime.date的list (四维)
>>> type(c.monthdatescalendar(2019,10)) #返回结果是list类型
<class 'list'>
>>> for wk in c.monthdatescalendar(2019,10):
for day in wk:
print(day," ",end="")
print(" end")
2019-09-30 2019-10-01 2019-10-02 2019-10-03 2019-10-04 2019-10-05 2019-10-06 end
2019-10-07 2019-10-08 2019-10-09 2019-10-10 2019-10-11 2019-10-12 2019-10-13 end
2019-10-14 2019-10-15 2019-10-16 2019-10-17 2019-10-18 2019-10-19 2019-10-20 end
2019-10-21 2019-10-22 2019-10-23 2019-10-24 2019-10-25 2019-10-26 2019-10-27 end
2019-10-28 2019-10-29 2019-10-30 2019-10-31 2019-11-01 2019-11-02 2019-11-03 end
>>> for month3 in c.yeardatescalendar(2019):
for month in month3:
for wk in month:
for day in wk:
print(day," ",end="")
print("") #下一星期打印前换行
print("") #下一月份之前插入空行
2018-12-31 2019-01-01 2019-01-02 2019-01-03 2019-01-04 2019-01-05 2019-01-06
2019-01-07 2019-01-08 2019-01-09 2019-01-10 2019-01-11 2019-01-12 2019-01-13
2019-01-14 2019-01-15 2019-01-16 2019-01-17 2019-01-18 2019-01-19 2019-01-20
2019-01-21 2019-01-22 2019-01-23 2019-01-24 2019-01-25 2019-01-26 2019-01-27
2019-01-28 2019-01-29 2019-01-30 2019-01-31 2019-02-01 2019-02-02 2019-02-03
2019-01-28 2019-01-29 2019-01-30 2019-01-31 2019-02-01 2019-02-02 2019-02-03
2019-02-04 2019-02-05 2019-02-06 2019-02-07 2019-02-08 2019-02-09 2019-02-10
2019-02-11 2019-02-12 2019-02-13 2019-02-14 2019-02-15 2019-02-16 2019-02-17
2019-02-18 2019-02-19 2019-02-20 2019-02-21 2019-02-22 2019-02-23 2019-02-24
2019-02-25 2019-02-26 2019-02-27 2019-02-28 2019-03-01 2019-03-02 2019-03-03
2019-02-25 2019-02-26 2019-02-27 2019-02-28 2019-03-01 2019-03-02 2019-03-03
2019-03-04 2019-03-05 2019-03-06 2019-03-07 2019-03-08 2019-03-09 2019-03-10
2019-03-11 2019-03-12 2019-03-13 2019-03-14 2019-03-15 2019-03-16 2019-03-17
2019-03-18 2019-03-19 2019-03-20 2019-03-21 2019-03-22 2019-03-23 2019-03-24
2019-03-25 2019-03-26 2019-03-27 2019-03-28 2019-03-29 2019-03-30 2019-03-31
2019-04-01 2019-04-02 2019-04-03 2019-04-04 2019-04-05 2019-04-06 2019-04-07
2019-04-08 2019-04-09 2019-04-10 2019-04-11 2019-04-12 2019-04-13 2019-04-14
2019-04-15 2019-04-16 2019-04-17 2019-04-18 2019-04-19 2019-04-20 2019-04-21
2019-04-22 2019-04-23 2019-04-24 2019-04-25 2019-04-26 2019-04-27 2019-04-28
2019-04-29 2019-04-30 2019-05-01 2019-05-02 2019-05-03 2019-05-04 2019-05-05
2019-04-29 2019-04-30 2019-05-01 2019-05-02 2019-05-03 2019-05-04 2019-05-05
2019-05-06 2019-05-07 2019-05-08 2019-05-09 2019-05-10 2019-05-11 2019-05-12
2019-05-13 2019-05-14 2019-05-15 2019-05-16 2019-05-17 2019-05-18 2019-05-19
2019-05-20 2019-05-21 2019-05-22 2019-05-23 2019-05-24 2019-05-25 2019-05-26
2019-05-27 2019-05-28 2019-05-29 2019-05-30 2019-05-31 2019-06-01 2019-06-02
2019-05-27 2019-05-28 2019-05-29 2019-05-30 2019-05-31 2019-06-01 2019-06-02
2019-06-03 2019-06-04 2019-06-05 2019-06-06 2019-06-07 2019-06-08 2019-06-09
2019-06-10 2019-06-11 2019-06-12 2019-06-13 2019-06-14 2019-06-15 2019-06-16
2019-06-17 2019-06-18 2019-06-19 2019-06-20 2019-06-21 2019-06-22 2019-06-23
2019-06-24 2019-06-25 2019-06-26 2019-06-27 2019-06-28 2019-06-29 2019-06-30
2019-07-01 2019-07-02 2019-07-03 2019-07-04 2019-07-05 2019-07-06 2019-07-07
2019-07-08 2019-07-09 2019-07-10 2019-07-11 2019-07-12 2019-07-13 2019-07-14
2019-07-15 2019-07-16 2019-07-17 2019-07-18 2019-07-19 2019-07-20 2019-07-21
2019-07-22 2019-07-23 2019-07-24 2019-07-25 2019-07-26 2019-07-27 2019-07-28
2019-07-29 2019-07-30 2019-07-31 2019-08-01 2019-08-02 2019-08-03 2019-08-04
2019-07-29 2019-07-30 2019-07-31 2019-08-01 2019-08-02 2019-08-03 2019-08-04
2019-08-05 2019-08-06 2019-08-07 2019-08-08 2019-08-09 2019-08-10 2019-08-11
2019-08-12 2019-08-13 2019-08-14 2019-08-15 2019-08-16 2019-08-17 2019-08-18
2019-08-19 2019-08-20 2019-08-21 2019-08-22 2019-08-23 2019-08-24 2019-08-25
2019-08-26 2019-08-27 2019-08-28 2019-08-29 2019-08-30 2019-08-31 2019-09-01
2019-08-26 2019-08-27 2019-08-28 2019-08-29 2019-08-30 2019-08-31 2019-09-01
2019-09-02 2019-09-03 2019-09-04 2019-09-05 2019-09-06 2019-09-07 2019-09-08
2019-09-09 2019-09-10 2019-09-11 2019-09-12 2019-09-13 2019-09-14 2019-09-15
2019-09-16 2019-09-17 2019-09-18 2019-09-19 2019-09-20 2019-09-21 2019-09-22
2019-09-23 2019-09-24 2019-09-25 2019-09-26 2019-09-27 2019-09-28 2019-09-29
2019-09-30 2019-10-01 2019-10-02 2019-10-03 2019-10-04 2019-10-05 2019-10-06
2019-09-30 2019-10-01 2019-10-02 2019-10-03 2019-10-04 2019-10-05 2019-10-06
2019-10-07 2019-10-08 2019-10-09 2019-10-10 2019-10-11 2019-10-12 2019-10-13
2019-10-14 2019-10-15 2019-10-16 2019-10-17 2019-10-18 2019-10-19 2019-10-20
2019-10-21 2019-10-22 2019-10-23 2019-10-24 2019-10-25 2019-10-26 2019-10-27
2019-10-28 2019-10-29 2019-10-30 2019-10-31 2019-11-01 2019-11-02 2019-11-03
2019-10-28 2019-10-29 2019-10-30 2019-10-31 2019-11-01 2019-11-02 2019-11-03
2019-11-04 2019-11-05 2019-11-06 2019-11-07 2019-11-08 2019-11-09 2019-11-10
2019-11-11 2019-11-12 2019-11-13 2019-11-14 2019-11-15 2019-11-16 2019-11-17
2019-11-18 2019-11-19 2019-11-20 2019-11-21 2019-11-22 2019-11-23 2019-11-24
2019-11-25 2019-11-26 2019-11-27 2019-11-28 2019-11-29 2019-11-30 2019-12-01
2019-11-25 2019-11-26 2019-11-27 2019-11-28 2019-11-29 2019-11-30 2019-12-01
2019-12-02 2019-12-03 2019-12-04 2019-12-05 2019-12-06 2019-12-07 2019-12-08
2019-12-09 2019-12-10 2019-12-11 2019-12-12 2019-12-13 2019-12-14 2019-12-15
2019-12-16 2019-12-17 2019-12-18 2019-12-19 2019-12-20 2019-12-21 2019-12-22
2019-12-23 2019-12-24 2019-12-25 2019-12-26 2019-12-27 2019-12-28 2019-12-29
2019-12-30 2019-12-31 2020-01-01 2020-01-02 2020-01-03 2020-01-04 2020-01-05
(4)itermonthdays(year,month)系列:(上图黄色部分)
PS.功能和上面的itermonthdates类似,只是上面返回date类型,这边返回date拆分之后的情报,以日期为单位
itermonthdays(year,month):指定月里面的所有周的日期的号数(int类型,1号返回1,31号返回31,不是该月份的日期时,返回0)
itermonthdays2(year,month):指定月里面的所有周的日期的号数,星期数字(0:星期一,6:星期日)
itermonthdays3(year,month):指定月里面的所有周的日期的年,月,日
itermonthdays4(year,month):指定月里面的所有周的日期的年,月,日,星期数字
>>> list(c.itermonthdays(2019,10)) #下面的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, 0]
>>> list(c.itermonthdays2(2019,10)) #括号里面,第一个代表几号,第二个代表星期几(0:星期一,6:星期日)
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5), (13, 6), (14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5), (20, 6), (21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5), (27, 6), (28, 0), (29, 1), (30, 2), (31, 3), (0, 4), (0, 5), (0, 6)]
>>> list(c.itermonthdays3(2019,10))
[(2019, 9, 30), (2019, 10, 1), (2019, 10, 2), (2019, 10, 3), (2019, 10, 4), (2019, 10, 5), (2019, 10, 6), (2019, 10, 7), (2019, 10, 8), (2019, 10, 9), (2019, 10, 10), (2019, 10, 11), (2019, 10, 12), (2019, 10, 13), (2019, 10, 14), (2019, 10, 15), (2019, 10, 16), (2019, 10, 17), (2019, 10, 18), (2019, 10, 19), (2019, 10, 20), (2019, 10, 21), (2019, 10, 22), (2019, 10, 23), (2019, 10, 24), (2019, 10, 25), (2019, 10, 26), (2019, 10, 27), (2019, 10, 28), (2019, 10, 29), (2019, 10, 30), (2019, 10, 31), (2019, 11, 1), (2019, 11, 2), (2019, 11, 3)]
>>> list(c.itermonthdays4(2019,10))
[(2019, 9, 30, 0), (2019, 10, 1, 1), (2019, 10, 2, 2), (2019, 10, 3, 3), (2019, 10, 4, 4), (2019, 10, 5, 5), (2019, 10, 6, 6), (2019, 10, 7, 0), (2019, 10, 8, 1), (2019, 10, 9, 2), (2019, 10, 10, 3), (2019, 10, 11, 4), (2019, 10, 12, 5), (2019, 10, 13, 6), (2019, 10, 14, 0), (2019, 10, 15, 1), (2019, 10, 16, 2), (2019, 10, 17, 3), (2019, 10, 18, 4), (2019, 10, 19, 5), (2019, 10, 20, 6), (2019, 10, 21, 0), (2019, 10, 22, 1), (2019, 10, 23, 2), (2019, 10, 24, 3), (2019, 10, 25, 4), (2019, 10, 26, 5), (2019, 10, 27, 6), (2019, 10, 28, 0), (2019, 10, 29, 1), (2019, 10, 30, 2), (2019, 10, 31, 3), (2019, 11, 1, 4), (2019, 11, 2, 5), (2019, 11, 3, 6)]
(5)monthdayscalendar(year, month) : 这个月所有周的几号,星期,日期分组的list
monthdays2calendar(year, month) :这个月所有周的几号(0-31的数字)和星期数字(0-6的数字),以星期,日期分组的list
>>> list(c.monthdayscalendar(2019,10)) #1-31代表该月1-31号,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, 0]]
>>>
>>> list(c.monthdays2calendar(2019,10))
[[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)], [(7, 0), (8, 1), (9, 2), (10, 3), (11, 4), (12, 5), (13, 6)], [(14, 0), (15, 1), (16, 2), (17, 3), (18, 4), (19, 5), (20, 6)], [(21, 0), (22, 1), (23, 2), (24, 3), (25, 4), (26, 5), (27, 6)], [(28, 0), (29, 1), (30, 2), (31, 3), (0, 4), (0, 5), (0, 6)]]