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

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

8.2. 日历 — 通用日历相关功能

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



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

这些函数和类中的大多数都依赖于 datetime 模块,该模块使用了一个理想化的日历,当前的公历在两个方向上都无限扩展。 这与 Dershowitz 和 Reingold 的书“日历计算”中的“预测公历”的定义相匹配,它是所有计算的基准日历。

class calendar.Calendar([firstweekday])

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

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

2.5 版中的新功能。

Calendar 实例有以下方法:

iterweekdays()

返回将用于一周的工作日数字的迭代器。 迭代器的第一个值将与 firstweekday 属性的值相同。

itermonthdates(year, month)

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

itermonthdays2(year, month)

返回 年 年 月 月的迭代器,类似于 itermonthdates()。 返回的天数将是由天数和工作日数组成的元组。

itermonthdays(year, month)

返回 年 年 月 月的迭代器,类似于 itermonthdates()。 返回的天数只是天数。

monthdatescalendar(year, month)

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

monthdays2calendar(year, month)

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

monthdayscalendar(year, month)

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

yeardatescalendar(year[, width])

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

yeardays2calendar(year[, width])

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

yeardayscalendar(year[, width])

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

class calendar.TextCalendar([firstweekday])

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

2.5 版中的新功能。

TextCalendar 实例有以下方法:

formatmonth(theyear, themonth[, w[, l]])

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

prmonth(theyear, themonth[, w[, l]])

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

formatyear(theyear[, w[, l[, c[, m]]]])

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

pryear(theyear[, w[, l[, c[, m]]]])

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

class calendar.HTMLCalendar([firstweekday])

此类可用于生成 HTML 日历。

2.5 版中的新功能。

HTMLCalendar 实例有以下方法:

formatmonth(theyear, themonth[, withyear])

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

formatyear(theyear[, width])

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

formatyearpage(theyear[, width[, css[, encoding]]])

以完整的 HTML 页面形式返回一年的日历。 width(默认为 3)指定每行的月数。 css 是要使用的级联样式表的名称。 None 如果不使用样式表,则可以传递。 encoding 指定用于输出的编码(默认为系统默认编码)。

class calendar.LocaleTextCalendar([firstweekday[, locale]])

TextCalendar 的这个子类可以在构造函数中传递一个语言环境名称,并将返回指定语言环境中的月份和工作日名称。 如果此语言环境包含编码,则所有包含月份和工作日名称的字符串都将作为 unicode 返回。

2.5 版中的新功能。

class calendar.LocaleHTMLCalendar([firstweekday[, locale]])

HTMLCalendar 的这个子类可以在构造函数中传递一个语言环境名称,并将返回指定语言环境中的月份和工作日名称。 如果此语言环境包含编码,则所有包含月份和工作日名称的字符串都将作为 unicode 返回。

2.5 版中的新功能。

笔记

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


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

calendar.setfirstweekday(weekday)

设置每周开始的工作日(0 是星期一,6 是星期日)。 值 MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 和 SUNDAY ] 为方便起见。 例如,将第一个工作日设置为星期日:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)

2.0 版中的新功能。

calendar.firstweekday()

返回每周开始的工作日的当前设置。

2.0 版中的新功能。

calendar.isleap(year)
如果 year 是闰年,则返回 True,否则返回 False。
calendar.leapdays(y1, y2)

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

2.0 版更改: 此函数不适用于 Python 1.5.2 中跨越一个世纪的变化范围。

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)
返回表示月份日历的矩阵。 每行代表一周; a 月以外的天数用零表示。 每周从星期一开始,除非由 setfirstweekday() 设置。
calendar.prmonth(theyear, themonth[, w[, l]])
打印 month() 返回的月份日历。
calendar.month(theyear, themonth[, w[, l]])

使用 TextCalendar 类的 formatmonth() 以多行字符串形式返回月份的日历。

2.0 版中的新功能。

calendar.prcal(year[, w[, l[c]]])
打印由 calendar() 返回的一整年的日历。
calendar.calendar(year[, w[, l[c]]])

使用 TextCalendar 类的 formatyear() 将一整年的 3 列日历作为多行字符串返回。

2.0 版中的新功能。

calendar.timegm(tuple)

一个无关但方便的函数,它需要一个时间元组,例如由 time 模块中的 gmtime() 函数返回,并返回相应的 Unix 时间戳值,假设纪元为 1970,和 POSIX 编码。 事实上, time.gmtime() 和 timegm() 是彼此的倒数。

2.0 版中的新功能。

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

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

也可以看看

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