calendar — 通用日历相关函数 — Python 文档
calendar — 通用日历相关功能
源代码: :source:`Lib/calendar.py`
该模块允许您像 Unix cal 程序一样输出日历,并提供与日历相关的其他有用功能。 默认情况下,这些日历将星期一作为一周的第一天,将星期日作为最后一天(欧洲惯例)。 使用 setfirstweekday() 将一周的第一天设置为星期日 (6) 或任何其他工作日。 指定日期的参数以整数形式给出。 有关相关功能,另请参阅 datetime 和 time 模块。
本模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限延伸。 这与 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 列日历作为多行字符串返回。 可选参数 w、l 和 c 分别用于日期列宽、每周行数和月列之间的空格数。 取决于构造函数中指定的或由 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
是星期日)。 值MONDAY
、TUESDAY
、WEDNESDAY
、THURSDAY
、FRIDAY
、SATURDAY
和SUNDAY
] 为方便起见。 例如,将第一个工作日设置为星期日:import calendar calendar.setfirstweekday(calendar.SUNDAY)
- calendar.firstweekday()
- 返回每周开始的工作日的当前设置。
- calendar.leapdays(y1, y2)
返回 y1 到 y2(不包括)范围内的闰年数,其中 y1 和 y2 是年份。
此函数适用于跨越世纪变化的范围。
- calendar.weekday(year, month, day)
- 返回 年 (
1970
–…)、 月 (1
–) 的星期几(0
是星期一)12
)、天 (1
–31
)。
- calendar.weekheader(n)
- 返回包含缩写工作日名称的标题。 n 指定一个工作日的字符宽度。
- calendar.monthrange(year, month)
- 对于指定的 year 和 month,返回该月第一天的工作日和该月的天数。
- 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]
是空字符串。