Skip to main content

8.2. calendar —一般日历相关功能

源代码: Lib/calendar.py


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

这些函数和类中的大多数依赖于使用理想化日历的 datetime 模块,当前公历日历在两个方向上延伸。这符合Dershowitz和Reingold的“Calendrical Calculations”中的“proleptic Gregorian”日历的定义,其中它是所有计算的基本日历。

class calendar.Calendar(firstweekday=0)

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

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

Calendar 实例有以下方法:

iterweekdays()

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

itermonthdates(year, month)

year 年返回一个迭代器为 month (1–12)。此迭代器将返回该月份的所有天(作为 datetime.date 对象),以及获得完整周所需的月份开始前或月份结束后的所有天数。

itermonthdays2(year, month)

返回一个迭代器为年 monthyear 类似于 itermonthdates()。返回的天数将是由日数字和星期数字组成的元组。

itermonthdays(year, month)

返回一个迭代器为年 monthyear 类似于 itermonthdates()。返回的天数将只是日数。

monthdatescalendar(year, month)

year 月份 month 中的周数列为完整周。周是七个 datetime.date 对象的列表。

monthdays2calendar(year, month)

year 月份 month 中的周数列为完整周。周是七天的日数和工作日数字的列表。

monthdayscalendar(year, month)

year 月份 month 中的周数列为完整周。周是七天数字的列表。

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 是要使用的级联样式表的名称。如果不使用样式表,可以传递 Noneencoding 指定要用于输出的编码(默认为系统默认编码)。

class calendar.LocaleTextCalendar(firstweekday=0, locale=None)

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

class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)

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

注解

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

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

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)

返回 year1970 –...),month1 - 12),day1 - 31)的星期几(0 为星期一)。

calendar.weekheader(n)

返回包含工作日缩写名称的标题。 n 指定一个工作日的字符宽度。

calendar.monthrange(year, month)

返回指定的 yearmonth 的月份第一天的工作日和月的天数。

calendar.monthcalendar(year, month)

返回表示一个月的日历的矩阵。每行代表一周;月之外的一个由零表示的a。除非由 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 模块类似的功能。

模块 time

低级时间相关功能。