calendar ---一般日历相关功能

源代码: Lib/calendar.py


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

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

class calendar.Calendar(firstweekday=0)

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

A Calendar 对象提供了几种方法,可用于准备要格式化的日历数据。此类本身不执行任何格式设置。这是子类的工作。

Calendar 实例具有以下方法:

iterweekdays()

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

itermonthdates(year, month)

返回当月的迭代器 月 (1-12)年内 year . 此迭代器将返回所有日期(如 datetime.date 对象)在月开始之前或月结束之后的所有天内,这是获得完整周所必需的。

itermonthdays(year, month)

返回当月的迭代器 月 年内 year 类似 itermonthdates() ,但不受 datetime.date 范围。返回的天数将只是月份中的第几天。对于指定月份之外的日期,日期是 0 .

itermonthdays2(year, month)

返回当月的迭代器 月 年内 year 类似 itermonthdates() ,但不受 datetime.date 范围。返回的天数将是由一个月的第几天和一个星期的第几天组成的元组。

itermonthdays3(year, month)

返回当月的迭代器 月 年内 year 类似 itermonthdates() ,但不受 datetime.date 范围。返回的天数将是由一年、一个月和一个月的数字组成的元组。

3.7 新版功能.

itermonthdays4(year, month)

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

3.7 新版功能.

monthdatescalendar(year, month)

返回月份中的周列表 月 的 year 整整一周。星期是七个星期的清单 datetime.date 物体。

monthdays2calendar(year, month)

返回月份中的周列表 月 的 year 整整一周。周是由7个元组组成的日数和工作日数的列表。

monthdayscalendar(year, month)

返回月份中的周列表 月 的 year 整整一周。周是7天的数字列表。

yeardatescalendar(year, width=3)

返回指定年份的数据,以备格式化。返回值是月份行的列表。每个月行最多包含 宽度 月(默认为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)

返回A 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表形式返回一个月的日历。如果 按年 如果为真,则年份将包含在标题中,否则只使用月份名称。

formatyear(theyear, width=3)

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

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

将一年的日历作为完整的HTML页返回。 宽度 (默认为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"]

请注意,此列表的长度必须为7项。

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() 这两个类的方法暂时将当前区域设置更改为给定的 locale . 因为当前区域设置是进程范围的设置,所以它们不是线程安全的。

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

calendar.setfirstweekday(weekday)

设置工作日 (0 是星期一, 6 每周开始。价值观 MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY 和 SUNDAY 提供方便。例如,要将第一个工作日设置为星期日,请执行以下操作:

import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()

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

calendar.isleap(year)

返回 True 如果 year 是闰年,否则 False .

calendar.leapdays(y1, y2)

返回范围为的闰年数 y1 到 y2 (不含),其中 y1 和 y2 是岁月。

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

calendar.weekday(year, month, day)

返回星期几 (0 是星期一) year (1970 …… 月 (1 -‘12’) day (1 -‘31’)。

calendar.weekheader(n)

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

calendar.monthrange(year, month)

为指定的 year 和 月 .

calendar.monthcalendar(year, month)

返回表示月份日历的矩阵。每行表示一周;月外的天数用零表示。每周从星期一开始,除非 setfirstweekday() .

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

打印由返回的月份日历 month() .

calendar.month(theyear, themonth, w=0, l=0)

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

calendar.prcal(year, w=0, l=0, c=6, m=3)

打印由返回的一整年的日历 calendar() .

calendar.calendar(year, w=2, l=1, c=6, m=3)

以多行字符串的形式返回一整年的三列日历,使用 formatyear() 的 TextCalendar 类。

calendar.timegm(tuple)

一个不相关但很方便的函数,它需要一个时间元组,例如 gmtime() 功能在 time 模块,并返回相应的unix时间戳值(假定1970年为epoch)和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] 是空字符串。

参见

模块 datetime

面向对象的日期和时间接口,具有与 time 模块。

模块 time

低级时间相关功能。