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

源代码: Lib/calendar.py


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

本模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限延伸。这与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 -将一整年的日历列为多行字符串。可选参数 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表形式返回一个月的日历。如果 按年 如果为真,则年份将包含在标题中,否则只使用月份名称。

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 每周开始。价值观 MONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAYSUNDAY 提供方便。例如,要将第一个工作日设置为星期日,请执行以下操作:

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

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

calendar.isleap(year)

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

calendar.leapdays(y1, y2)

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

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

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

低级时间相关功能。