calendar 模块定义了Calendar类,它封装了值的计算,比如计算给定月份或年份中周的日期。 此外,TextCalendar 和 HTMLCalendar 类可以生成预格式化的输出。
prmonth() #生成一个月的格式化文本输出。
import calendar
c = calendar.TextCalendar(calendar.SUNDAY)
c.prmonth(2019, 7)
要以不同于其中一个可用默认值的格式生成输出,请使用 calendar 计算日期并将值组织为周和月 范围,然后迭代结果。 Calendar模块的 weekheader(),monthcalendar()和 yeardays2calendar() 方法对此特别有用。 调用yeardays2calendar()会生成一系列“月份行”列表。 l 每个列表包括月份作为另一个周列表。这几周是由日期编号(1-31)和工作日编号(0-6)组成的 元组列表。超出月份的天数为 0
import calendar
import pprint
cal = calendar.Calendar(calendar.SUNDAY)
cal_data = cal.yeardays2calendar(2019, 7)#以7个月为一行
print('len(cal_data) :', len(cal_data))
top_months = cal_data[0]#把第一行(2019.1-2019.7)赋值给top_months
print('len(top_months) :', len(top_months))
first_month = top_months[0]#在前7个月中取第一个月,即2019年一月
print('len(first_month) :', len(first_month))
print('first_month:')
pprint.pprint(first_month, width=65)
import calendar
cal = calendar.TextCalendar(calendar.SUNDAY)
print(cal.formatyear(2019, 2, 1, 1, 3))
运行结果
虽然日历模块主要侧重于以各种格式打印完整日历,但它还提供了以其他方式处理日期的有用功能,例如计算重 复事件的日期。 例如,Python 亚特兰大用户组在每个月的第二个星期四开会。要计算一年的会议日期,请使用 monthcalendar():
import calendar
import sys
#year = int(sys.argv[1])
year = 2019
# Show every month
for month in range(1, 13):
# Compute the dates for each week that overlaps the month
c = calendar.monthcalendar(year, month)
first_week = c[0]
second_week = c[1]
third_week = c[2]
# If there is a Thursday in the first week, the second Thursday is # in the second week.
# Otherwise, the second Thursday must be in the third week.
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: 10 Feb: 14 Mar: 14 Apr: 11 May: 9 Jun: 13 Jul: 11 Aug: 8 Sep: 12 Oct: 10 Nov: 14 Dec: 12
ps:用这个功能还可以用来找每一年的父亲节母亲节等。