python日期calendar模块相关

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)]]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值