Python之calendar模块的使用
calendar模块的作用
calendar模块定义了Calendar类,其中封装了一些值的计算,如给定的一个月或一年中的周日期。另外,TextCalendar和HTMLCalendar类可以生成经过预格式化的输出。
1、指定年月,显示出日期
import calendar c = calendar.TextCalendar(calendar.SUNDAY) c.prmonth(2020,5)
运行效果
May 2020
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
31
2、指定年月,打印出元组的日期
import calendar import pprint cal = calendar.Calendar(calendar.SUNDAY) cal_data = cal.yeardays2calendar(2020, 5) print('len(cal_data) :', len(cal_data)) top_months = cal_data[0] print('len(top_months) :', len(top_months)) first_month = top_months[0] print('len(first_month) :', len(first_month)) print('first_month:') pprint.pprint(first_month, width=65)
运行效果
len(cal_data) : 3 len(top_months) : 5 len(first_month) : 5 first_month: [[(0, 6), (0, 0), (0, 1), (1, 2), (2, 3), (3, 4), (4, 5)], [(5, 6), (6, 0), (7, 1), (8, 2), (9, 3), (10, 4), (11, 5)], [(12, 6), (13, 0), (14, 1), (15, 2), (16, 3), (17, 4), (18, 5)], [(19, 6), (20, 0), (21, 1), (22, 2), (23, 3), (24, 4), (25, 5)], [(26, 6), (27, 0), (28, 1), (29, 2), (30, 3), (31, 4), (0, 5)]]
3、打印出完整的年份日历
import calendar cal = calendar.TextCalendar(calendar.SUNDAY) print(cal.formatyear(2020, 2, 1, 1, 3))
运行效果
2020 January February March 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 7 5 6 7 8 9 10 11 2 3 4 5 6 7 8 8 9 10 11 12 13 14 12 13 14 15 16 17 18 9 10 11 12 13 14 15 15 16 17 18 19 20 21 19 20 21 22 23 24 25 16 17 18 19 20 21 22 22 23 24 25 26 27 28 26 27 28 29 30 31 23 24 25 26 27 28 29 29 30 31 April May June 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 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 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 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 Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa 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
4、指定年月,获取不同国家的日历格式
import calendar c = calendar.LocaleTextCalendar(locale='en_US') c.prmonth(2017, 7) print() c = calendar.LocaleTextCalendar(locale='zh_CN') c.prmonth(2017, 7)
运行效果
July 2017 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 七月 2017 一 二 三 四 五 六 日 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
5、指定年月,打印出一个按周拆分的列表,默认第一个元素是周一
import calendar import pprint pprint.pprint(calendar.monthcalendar(2020, 5))
运行效果
[[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, 31]]
6、计算每个月第2周,周四的日期的示例
import calendar year = 2020 # 计算每个月第2周,周四的日期 for month in range(1, 13): # 计算每个星期与月份重叠的日期 c = calendar.monthcalendar(year, month) first_week = c[0] second_week = c[1] third_week = c[2] # 如果第一周有星期四,第二个星期四是第二周的。否则,第二个星期四必须在第三周 if first_week[calendar.THURSDAY]: meeting_date = second_week[calendar.THURSDAY] else: meeting_date = third_week[calendar.THURSDAY] print('{:>3}: {:>2}'.format(calendar.month_abbr[month], meeting_date))
运行效果
Jan: 9 Feb: 13 Mar: 12 Apr: 9 May: 14 Jun: 11 Jul: 9 Aug: 13 Sep: 10 Oct: 8 Nov: 12 Dec: 10