calendar—与 calendar 相关的常规Function

源代码: Lib/calendar.py


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

此模块中定义的函数和类使用理想化的 calendar,当前的公历在两个方向上无限期扩展。这与 Dershowitz 和 Reingold 的书“ Calendrical Calculations”中“ progresive Gregorian”calendar 的定义匹配,该 calendar 是所有计算的基础 calendar。零年和负年按照 ISO 8601 标准的规定进行解释。 0 年是 1 BC,-1 年是 2 BC,依此类推。

    • class * calendar. Calendar(* firstweekday = 0 *)
    • 创建一个Calendar对象。 * firstweekday *是一个整数,指定一周中的第一天。 0是星期一(默认值),6是星期日。

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

Calendar个实例具有以下方法:

  • iterweekdays ( )

    • 返回用于一周的星期几的迭代器。迭代器的第一个值将与firstweekday属性的值相同。
  • itermonthdates()

    • 返回年份* year 中月份 month *(1-12)的迭代器。该迭代器将返回该月的所有天(作为datetime.date个对象),以及返回整周所需的月初或月末之后的所有天。
  • itermonthdays()

    • 返回类似于* itermonthdates()的年份* year 中的月份 month *的迭代器,但不受datetime.date范围的限制。返回的天数只是月份中的天数。对于指定月份以外的日子,天数为0
  • itermonthdays2()

    • 返回类似于* itermonthdates()的年份* year 中的月份 month *的迭代器,但不受datetime.date范围的限制。返回的天为 Tuples,由月中的一天号和工作日的数字组成。
  • itermonthdays3()

    • 返回类似于* itermonthdates()的年份* year 中的月份 month *的迭代器,但不受datetime.date范围的限制。返回的天为 Tuples,该 Tuples 由一年,一个月和一个月中的一天的数字组成。

3.7 版中的新Function。

  • itermonthdays4()
    • 返回类似于* itermonthdates()的年份* year 中的月份 month *的迭代器,但不受datetime.date范围的限制。返回的天为 Tuples,该 Tuples 由一年,一个月,一个月中的某天以及一周中的某天组成。

3.7 版中的新Function。

  • monthdatescalendar()

    • 将* year 的月份 month *的星期列表作为完整的星期返回。周是七个datetime.date对象的列表。
  • monthdays2calendar()

    • 将* year 的月份 month *的星期列表作为完整的星期返回。星期是由日期和工作日数字组成的七个 Tuples 的列表。
  • monthdayscalendar()

    • 将* year 的月份 month *的星期列表作为完整的星期返回。周是 7 天数字的列表。
  • yeardatescalendar(* year width = 3 *)

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

    • 返回指定年份准备格式化的数据(类似于yeardatescalendar())。周列表中的条目是天数和工作日数的 Tuples。这个月以外的天数为零。
  • yeardayscalendar(* year width = 3 *)

    • 返回指定年份准备格式化的数据(类似于yeardatescalendar())。周列表中的条目是天数。这个月以外的天数为零。
    • class * calendar. TextCalendar(* firstweekday = 0 *)
    • 此类可用于生成纯文本 calendar。

TextCalendar个实例具有以下方法:

  • formatmonth(* theyear themonth w = 0 l = 0 *)

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

  • formatyear(* theyear w = 2 l = 1 c = 6 m = 3 *)

    • 以多行字符串的形式返回全年的* m 列 calendar。可选参数 w l c *分别用于日期列宽度,每周行数和月份列之间的间隔数。取决于构造函数中指定的或由setfirstweekday()方法设置的第一个工作日。可以生成 calendar 的最早年份取决于平台。
  • pryear(* theyear w = 2 l = 1 c = 6 m = 3 *)

    • class * calendar. HTMLCalendar(* firstweekday = 0 *)
    • 此类可用于生成 HTMLcalendar。

HTMLCalendar个实例具有以下方法:

  • formatmonth(* theyear themonth withyear = True *)

    • 返回一个月的 calendar 作为 HTML 表。如果* withyear *为 true,则年份将包含在标题中,否则将仅使用月份名称。
  • formatyear(* theyear width = 3 *)

    • 将一年的 calendar 返回为 HTML 表格。 * width *(默认为 3)指定每行的月数。
  • formatyearpage(* theyear width = 3 css ='calendar.css' encoding = None *)

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

HTMLCalendar具有以下属性,您可以重写以下属性来自定义 calendar 使用的 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 版中的新Function。

  • cssclasses_weekday_head
    • Headers 行中用于工作日名称的 CSS 类列表。默认值与cssclasses相同。

3.7 版中的新Function。

  • cssclass_month_head
    • 本月的主要 CSS 类(由formatmonthname()使用)。默认值为"month"

3.7 版中的新Function。

  • cssclass_month
    • 整个月表的 CSS 类(由formatmonth()使用)。默认值为"month"

3.7 版中的新Function。

  • cssclass_year
    • 全年表格的 CSS 类(由formatyear()使用)。默认值为"year"

3.7 版中的新Function。

  • cssclass_year_head
    • 全年表头的 CSS 类(由formatyear()使用)。默认值为"year"

3.7 版中的新Function。

请注意,尽管上述类属性的命名是单数(例如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 返回。

Note

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

对于简单的文本 calendar,此模块提供以下Function。

  • calendar. setfirstweekday(工作日)
    • 将工作日(0是星期一,6是星期日)设置为每周开始。为方便起见,提供了值MONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAYSUNDAY。例如,将第一个工作日设置为星期日:
import calendar
calendar.setfirstweekday(calendar.SUNDAY)
  • calendar. firstweekday ( )

    • 返回每个星期开始的工作日的当前设置。
  • calendar. isleap()

    • 如果* year *是 a 年,则返回True,否则返回False
  • calendar. leapdays(* y1 y2 *)

    • 返回 of 年,从* y1 y2 (不包括),其中 y1 y2 *是年份。

此Function适用于跨世纪变化的范围。

  • calendar. weekday()

    • 返回* year (1970 –…), month (112), day *(131)的星期几(0是星期一)。
  • calendar. weekheader(* n *)

    • 返回包含缩写的工作日名称的 Headers。 * n *指定一个工作日的宽度(以字符为单位)。
  • calendar. monthrange()

    • 返回指定的* year month *的月份的第一天的工作日以及月份中的天数。
  • calendar. monthcalendar()

    • 返回代表一个月的 calendar 的矩阵。每行代表一个星期;月份以外的日子用零表示。除非由setfirstweekday()设置,否则每个星期从星期一开始。
  • calendar. prmonth(* theyear themonth w = 0 l = 0 *)

    • 打印month()返回的一个月的 calendar。
  • calendar. month(* theyear themonth w = 0 l = 0 *)

    • 使用TextCalendar类的formatmonth()以多行字符串返回一个月的 calendar。
  • calendar. prcal(* year w = 0 l = 0 c = 6 m = 3 *)

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

    • 使用TextCalendar类的formatyear()作为多行字符串返回整个一年的 3 列 calendar。
  • calendar. timegm(* tuple *)

    • 一个不相关但方便的函数,它使用一个时间 Tuples(例如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]是空字符串。

See also

  • Module datetime

  • 面向对象的日期和时间接口,其Function类似于time模块。

  • Module time

  • 与时间相关的底层Function。