该模块允许您像 Unix cal程序一样输出日历,并提供与日历相关的附加有用功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为最后一天(欧洲惯例)。用于setfirstweekday()将一周的第一天设置为星期日 (6) 或任何其他工作日。指定日期的参数以整数形式给出。有关相关功能,另请参阅datetimetime模块。

该模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限扩展。这与 Dershowitz 和 Reingold 的书“日历计算”中“预测公历”的定义相匹配,它是所有计算的基准日历。零年和负年按照 ISO 8601 标准的规定进行解释。第 0 年是公元前 1 年,-1 年是公元前 2 年,依此类推。

class calendar.Calendar(firstweekday=0)
创建一个Calendar对象。firstweekday是一个整数,指定一周的第一天。0是星期一(默认),6是星期日。

一个Calendar对象提供了几种方法,可用于准备日历数据以进行格式化。这个类本身不做任何格式化。这是子类的工作。

Calendar实例有以下方法:

iterweekdays()
返回将使用一周的工作日编号的迭代器。迭代器的第一个值将与firstweekday属性的值相同。
itermonthdates(yearmonth)
返回年份中月份月份 (1-12) 的迭代器。 此迭代器将返回该月的所有天数(作为 datetime.date 对象)以及该月开始之前或月末之后的所有天数,这些天数需要获得完整的一周。
itermonthdays(yearmonth)
返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将只是月份数字。 对于指定月份以外的天数,天数为 0。
itermonthdays2(yearmonth)
返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由月份编号和星期编号组成的元组。
itermonthdays3(yearmonth)
返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由一年、一个月和一个月中的某一天组成的元组数字。

3.7 版中的新功能。

itermonthdays4(yearmonth)
返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由一年、一个月、一个月中的一天和一周中的一天数字组成的元组。

3.7 版中的新功能。

monthdatescalendar(yearmonth)
将一年中月份中的周列表作为完整周返回。 周是七个 datetime.date 对象的列表。
monthdays2calendar(yearmonth)
将一年中月份中的周列表作为完整周返回。 周是由七组日期编号和工作日编号组成的列表。
monthdayscalendar(yearmonth)
一年中月份中的周列表作为完整周返回。周是 7 天数字的列表。
yeardatescalendar(yearwidth=3)
返回指定年份的数据以进行格式化。 返回值是月份行列表。 每个月行最多包含宽度月(默认为 3)。 每个月包含 4 到 6 周,每周包含 1-7 天。 天是 datetime.date 对象。
yeardays2calendar(yearwidth=3)
返回准备格式化的指定年份的数据(类似于 yeardatescalendar())。周列表中的条目是天数和工作日数的元组。本月以外的天数为零。
yeardayscalendar(yearwidth=3)
返回准备格式化的指定年份的数据(类似于 yeardatescalendar())。周列表中的条目是天数。本月以外的天数为零。
calendar.TextCalendar(firstweekday=0)
此类可用于生成纯文本日历。

TextCalendar实例有以下方法:

formatmonth(theyearthemonthw=0l=0)
在多行字符串中返回一个月的日历。如果提供w,它指定居中的日期列的宽度。如果给出l,它指定每周将使用的行数。取决于构造函数中指定或 setfirstweekday()方法设置的第一个工作日。
prmonth(theyearthemonthw=0l=0)
打印由 formatmonth() 返回的月份日历。
formatyear(theyearw=2l=1c=6m=3)
将一整年的m列日历作为多行字符串返回。可选参数wlc分别用于日期列宽、每周行数和月份列之间的空格数。取决于构造函数中指定或 setfirstweekday()方法设置的第一个工作日。可以生成日历的最早年份取决于平台。
pryear(theyearw=2l=1c=6m=3)
打印由 formatyear() 返回的一整年的日历。
class calendar.HTMLCalendar(firstweekday=0)
此类可用于生成 HTML 日历。

HTMLCalendar实例有以下方法:

formatmonth(theyearthemonthwithyear=True)
以 HTML 表格的形式返回一个月的日历。如果withyear为真,则年份将包含在标题中,否则将仅使用月份名称。
formatyear(theyearwidth=3)
以 HTML 表格的形式返回一年的日历。宽度(默认为 3)指定每行的月数。
formatyearpage(theyearwidth=3css=’calendar.css’encoding=None)
将一年的日历作为完整的 HTML 页面返回。 宽度(默认为 3)指定每行的月数。 css 是要使用的级联样式表的名称。 如果不应该使用样式表,则不能传递任何内容。 encoding 指定用于输出的编码(默认为系统默认编码)。

HTMLCalendar具有以下属性,您可以覆盖以自定义日历使用的 CSS 类:

cssclasses
每个工作日使用的 CSS 类列表。默认班级列表是:
cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

每天可以添加更多样式:

cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]

请注意,此列表的长度必须为七个项目。

cssclass_noday
工作日的CSS类在上个月或下个月发生。

版本3.7中的新功能。

cssclasses_weekday_head
用于标题行中工作日名称的CSS类列表。默认值与cssclasses相同。

版本3.7中的新功能。

cssclass_month_head
月份的头部CSS类(由…使用formatmonthname())。默认值为"month"

版本3.7中的新功能。

cssclass_month
整个月表的CSS类(由…使用formatmonth())。默认值为"month"

版本3.7中的新功能。

cssclass_year
全年表格的CSS类(由…使用 formatyear())。默认值为"year"

版本3.7中的新功能。

cssclass_year_head
全年表头的CSS类(由…使用 formatyear())。默认值为"year"

版本3.7中的新功能。

请注意,尽管上述类属性的命名是单数(例如cssclass_month cssclass_noday),但可以用空格分隔的CSS类列表替换单个CSS类,例如:

"text-bold text-red"

以下是如何HTMLCalendar自定义的示例:

class CustomHTMLCal(calendar.HTMLCalendar):
    cssclasses = [style + " text-nowrap" for style in
                  calendar.HTMLCalendar.cssclasses]
    cssclass_month_head = "text-center month-head"
    cssclass_month = "text-center month"
    cssclass_year = "text-italic lead"
class calendar.LocaleTextCalendar(firstweekday=0locale=None)
此子类TextCalendar可以在构造函数中传递区域设置名称,并将在指定的区域设置中返回月份和工作日名称。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为unicode返回。
class calendar.LocaleHTMLCalendar(firstweekday=0locale=None)
此子类HTMLCalendar可以在构造函数中传递区域设置名称,并将在指定的区域设置中返回月份和工作日名称。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为unicode返回。

注意

formatweekday()formatmonthname()这两个类的方法当前区域临时改变为给定的语言环境。由于当前区域设置是进程范围的设置,因此它们不是线程安全的。

对于简单的文本日历,此模块提供以下功能。

calendar.setfirstweekday(weekday)
将工作日(0星期一,6星期日)设置为每周开始。值MONDAYTUESDAYWEDNESDAYTHURSDAY, FRIDAYSATURDAY,和SUNDAY被提供了方便。例如,要将第一个工作日设置为星期日:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()
返回每周开始的工作日的当前设置。
calendar.isleap(year)
True如果年份是闰年,则返回,否则返回False
calendar.leapdays(y1,y2)
返回y1y2(不包括)范围内的闰年数,其中y1y2是年。

此功能适用于跨越一个世纪变化的范围。

calendar.weekday(year, month, day)
返回(- …), (- ),(- )的星期几(0星期一)。1970112131
calendar.weekheader(n)
返回包含缩写的工作日名称的标题。n指定一个工作日的字符宽度。
calendar.monthrange(year, month)
返回指定年份月份的月份第一天的工作日和月份的天数。
calendar.monthcalendar(year, month)
返回表示月份日历的矩阵。 每行代表一周; 以零表示的月份 a 以外的天数。 每周从星期一开始,除非由 setfirstweekday() 设置。
calendar.prmonth(theyearthemonthw=0l=0)
打印由 month() 返回的一个月的日历。
calendar.month(theyearthemonthw=0l=0)
使用 TextCalendar 类的 formatmonth() 以多行字符串形式返回一个月的日历。
calendar.prcal(yearw=0l=0c=6m=3)
打印由 calendar() 返回的一整年的日历。
calendar.calendar(yearw=2l=1c=6m=3)
使用 TextCalendar 类的 formatyear() 将一整年的 3 列日历作为多行字符串返回。
calendar.timegm(tuple)
一个不相关但方便的函数,它采用时间元组,例如由 time 模块中的 gmtime() 函数返回,并返回相应的 Unix 时间戳值,假设 1970 年和 POSIX 编码。 事实上,time.gmtime() 和 timegm() 是彼此的倒数。

calendar模块导出以下数据属性:

calendar.day_name
表示当前语言环境中星期几的数组。
calendar.day_abbr
表示当前语言环境中星期几的缩写的数组。
calendar.month_name
表示当前语言环境中一年中月份的数组。 这遵循 1 月为第 1 个月的正常约定,因此它的长度为 13,而 month_name[0] 是空字符串。
calendar.month_abbr
一个数组,表示当前语言环境中一年中的缩写月份。 这遵循 1 月为第 1 个月的正常约定,因此它的长度为 13,而 month_abbr[0] 是空字符串。

也可以看看

Module datetime
面向对象的日期和时间接口,具有与time模块类似的功能 。
Module time
低级时间相关功能。