calendar — 通用日历相关函数 — Python 文档

来自菜鸟教程
Python/docs/3.9/library/calendar
跳转至:导航、​搜索

calendar — 通用日历相关功能

源代码: :source:`Lib/calendar.py`



该模块允许您像 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(year, month)

返回 (1-12) 月的迭代器。 此迭代器将返回该月的所有天数(作为 datetime.date 对象)以及该月开始之前或月底之后的所有天数,这些天数需要获得完整的一周。

itermonthdays(year, month)

返回 月的迭代器,类似于 itermonthdates(),但不受 datetime.date 范围限制. 返回的天数只是月份中的天数。 指定月份以外的天数为0

itermonthdays2(year, month)

返回 月的迭代器,类似于 itermonthdates(),但不受 datetime.date 范围限制. 返回的天数将是由月份编号和工作日编号组成的元组。

itermonthdays3(year, month)

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

3.7 版中的新功能。

itermonthdays4(year, month)

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

3.7 版中的新功能。

monthdatescalendar(year, month)

返回 中的周列表作为完整周。 周是七个 datetime.date 对象的列表。

monthdays2calendar(year, month)

返回 中的周列表作为完整周。 周是由七组天数和工作日数组成的列表。

monthdayscalendar(year, month)

返回 中的周列表作为完整周。 周是 7 天数字的列表。

yeardatescalendar(year, width=3)

返回准备格式化的指定年份的数据。 返回值是月份行列表。 每个月行最多包含 width 个月(默认为 3)。 每个月包含 4 到 6 周,每周包含 1-7 天。 天是 datetime.date 对象。

yeardays2calendar(year, width=3)

返回准备格式化的指定年份的数据(类似于 yeardatescalendar())。 周列表中的条目是天数和工作日数的元组。 本月以外的天数为零。

yeardayscalendar(year, width=3)

返回准备格式化的指定年份的数据(类似于 yeardatescalendar())。 周列表中的条目是天数。 本月以外的天数为零。

class calendar.TextCalendar(firstweekday=0)

此类可用于生成纯文本日历。

TextCalendar 实例有以下方法:

formatmonth(theyear, themonth, w=0, l=0)

在多行字符串中返回一个月的日历。 如果提供 w,它指定日期列的宽度,这些列居中。 如果给出 l,则指定每周将使用的行数。 取决于构造函数中指定的或由 setfirstweekday() 方法设置的第一个工作日。

prmonth(theyear, themonth, w=0, l=0)

打印 formatmonth() 返回的月份日历。

formatyear(theyear, w=2, l=1, c=6, m=3)

将整年的 m 列日历作为多行字符串返回。 可选参数 wlc 分别用于日期列宽、每周行数和月列之间的空格数。 取决于构造函数中指定的或由 setfirstweekday() 方法设置的第一个工作日。 可以生成日历的最早年份取决于平台。

pryear(theyear, w=2, l=1, c=6, m=3)

打印 formatyear() 返回的一整年的日历。

class calendar.HTMLCalendar(firstweekday=0)

此类可用于生成 HTML 日历。

HTMLCalendar 实例有以下方法:

formatmonth(theyear, themonth, withyear=True)

以 HTML 表格形式返回一个月的日历。 如果 withyear 为 true,则标题中将包含年份,否则将仅使用月份名称。

formatyear(theyear, width=3)

以 HTML 表格形式返回一年的日历。 width(默认为 3)指定每行的月数。

formatyearpage(theyear, width=3, css='calendar.css', encoding=None)

以完整的 HTML 页面形式返回一年的日历。 width(默认为 3)指定每行的月数。 css 是要使用的级联样式表的名称。 None 如果不使用样式表,则可以传递。 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=0, locale=None)
TextCalendar 的这个子类可以在构造函数中传递一个语言环境名称,并将返回指定语言环境中的月份和工作日名称。 如果此语言环境包含编码,则所有包含月份和工作日名称的字符串都将作为 unicode 返回。
class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)
HTMLCalendar 的这个子类可以在构造函数中传递一个语言环境名称,并将返回指定语言环境中的月份和工作日名称。 如果此语言环境包含编码,则所有包含月份和工作日名称的字符串都将作为 unicode 返回。

笔记

这两个类的 formatweekday()formatmonthname() 方法暂时将当前语言环境更改为给定的 语言环境。 因为当前语言环境是进程范围的设置,所以它们不是线程安全的。


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

calendar.setfirstweekday(weekday)

设置每周开始的工作日(0 是星期一,6 是星期日)。 值 MONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAYSUNDAY ] 为方便起见。 例如,将第一个工作日设置为星期日:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()
返回每周开始的工作日的当前设置。
calendar.isleap(year)
如果 year 是闰年,则返回 True,否则返回 False
calendar.leapdays(y1, y2)

返回 y1y2(不包括)范围内的闰年数,其中 y1y2 是年份。

此函数适用于跨越世纪变化的范围。

calendar.weekday(year, month, day)
返回 (1970–…)、 (1–) 的星期几(0 是星期一) 12)、 (131)。
calendar.weekheader(n)
返回包含缩写工作日名称的标题。 n 指定一个工作日的字符宽度。
calendar.monthrange(year, month)
对于指定的 yearmonth,返回该月第一天的工作日和该月的天数。
calendar.monthcalendar(year, month)
返回表示月份日历的矩阵。 每行代表一周; 月份以外的天数用零表示。 每周从星期一开始,除非由 setfirstweekday() 设置。
calendar.prmonth(theyear, themonth, w=0, l=0)
打印 month() 返回的月份日历。
calendar.month(theyear, themonth, w=0, l=0)
使用 TextCalendar 类的 formatmonth() 以多行字符串形式返回月份的日历。
calendar.prcal(year, w=0, l=0, c=6, m=3)
打印由 calendar() 返回的一整年的日历。
calendar.calendar(year, w=2, l=1, c=6, m=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,因此它的长度为 13,而 month_name[0] 是空字符串。
calendar.month_abbr
一个数组,表示当前语言环境中一年中的缩写月份。 这遵循一月的常规约定,月份编号为 1,因此它的长度为 13,而 month_abbr[0] 是空字符串。

也可以看看

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