calendar日历相关的功能详解 – (26)Python语言(必读进阶学习教程)(参考资料)
该模块允许您像 Unix cal程序一样输出日历,并提供与日历相关的附加有用功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为最后一天(欧洲惯例)。用于setfirstweekday()
将一周的第一天设置为星期日 (6) 或任何其他工作日。指定日期的参数以整数形式给出。有关相关功能,另请参阅datetime
和time
模块。
该模块中定义的函数和类使用理想化的日历,当前的公历在两个方向上无限扩展。这与 Dershowitz 和 Reingold 的书“日历计算”中“预测公历”的定义相匹配,它是所有计算的基准日历。零年和负年按照 ISO 8601 标准的规定进行解释。第 0 年是公元前 1 年,-1 年是公元前 2 年,依此类推。
- class
calendar.
firstweekday=0Calendar(
)
- 创建一个
Calendar
对象。firstweekday是一个整数,指定一周的第一天。0
是星期一(默认),6
是星期日。一个
Calendar
对象提供了几种方法,可用于准备日历数据以进行格式化。这个类本身不做任何格式化。这是子类的工作。Calendar
实例有以下方法:iterweekdays()
- 返回将使用一周的工作日编号的迭代器。迭代器的第一个值将与
firstweekday
属性的值相同。
yearitermonthdates(
month,
)
- 返回年份中月份月份 (1-12) 的迭代器。 此迭代器将返回该月的所有天数(作为 datetime.date 对象)以及该月开始之前或月末之后的所有天数,这些天数需要获得完整的一周。
itermonthdays
(
year,
month)
- 返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将只是月份数字。 对于指定月份以外的天数,天数为 0。
yearitermonthdays2(
month,
)
- 返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由月份编号和星期编号组成的元组。
yearitermonthdays3(
month,
)
- 返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由一年、一个月和一个月中的某一天组成的元组数字。
3.7 版中的新功能。
yearitermonthdays4(
month,
)
- 返回类似于 itermonthdates() 的年年月月的迭代器,但不受 datetime.date 范围的限制。 返回的天数将是由一年、一个月、一个月中的一天和一周中的一天数字组成的元组。
3.7 版中的新功能。
yearmonthdatescalendar(
month,
)
- 将一年中月份中的周列表作为完整周返回。 周是七个 datetime.date 对象的列表。
yearmonthdays2calendar(
month,
)
- 将一年中月份中的周列表作为完整周返回。 周是由七组日期编号和工作日编号组成的列表。
yearmonthdayscalendar(
month,
)
- 将一年中月份中的周列表作为完整周返回。周是 7 天数字的列表。
yearyeardatescalendar(
width=3,
)
- 返回指定年份的数据以进行格式化。 返回值是月份行列表。 每个月行最多包含宽度月(默认为 3)。 每个月包含 4 到 6 周,每周包含 1-7 天。 天是 datetime.date 对象。
yearyeardays2calendar(
width=3,
)
- 返回准备格式化的指定年份的数据(类似于
yeardatescalendar()
)。周列表中的条目是天数和工作日数的元组。本月以外的天数为零。
yearyeardayscalendar(
width=3,
)
- 返回准备格式化的指定年份的数据(类似于
yeardatescalendar()
)。周列表中的条目是天数。本月以外的天数为零。
- 类
calendar.
firstweekday=0TextCalendar(
)
- 此类可用于生成纯文本日历。
TextCalendar
实例有以下方法:
theyearformatmonth(
themonth,
w=0,
l=0,
)
- 在多行字符串中返回一个月的日历。如果提供w,它指定居中的日期列的宽度。如果给出l,它指定每周将使用的行数。取决于构造函数中指定或
setfirstweekday()
方法设置的第一个工作日。
theyearprmonth(
themonth,
w=0,
l=0,
)
- 打印由 formatmonth() 返回的月份日历。
theyearformatyear(
w=2,
l=1,
c=6,
m=3,
)
- 将一整年的m列日历作为多行字符串返回。可选参数w、l和c分别用于日期列宽、每周行数和月份列之间的空格数。取决于构造函数中指定或
setfirstweekday()
方法设置的第一个工作日。可以生成日历的最早年份取决于平台。
theyearpryear(
w=2,
l=1,
c=6,
m=3,
)
- 打印由 formatyear() 返回的一整年的日历。
- class
calendar.
firstweekday=0HTMLCalendar(
)
- 此类可用于生成 HTML 日历。
HTMLCalendar
实例有以下方法:
theyearformatmonth(
themonth,
withyear=True,
)
- 以 HTML 表格的形式返回一个月的日历。如果withyear为真,则年份将包含在标题中,否则将仅使用月份名称。
theyearformatyear(
width=3,
)
- 以 HTML 表格的形式返回一年的日历。宽度(默认为 3)指定每行的月数。
theyearformatyearpage(
width=3,
css=’calendar.css’,
encoding=None,
)
- 将一年的日历作为完整的 HTML 页面返回。 宽度(默认为 3)指定每行的月数。 css 是要使用的级联样式表的名称。 如果不应该使用样式表,则不能传递任何内容。 encoding 指定用于输出的编码(默认为系统默认编码)。
HTMLCalendar
具有以下属性,您可以覆盖以自定义日历使用的 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中的新功能。
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.
firstweekday=0LocaleTextCalendar(
locale=None,
)
- 此子类
TextCalendar
可以在构造函数中传递区域设置名称,并将在指定的区域设置中返回月份和工作日名称。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为unicode返回。
- class
calendar.
firstweekday=0LocaleHTMLCalendar(
locale=None,
)
- 此子类
HTMLCalendar
可以在构造函数中传递区域设置名称,并将在指定的区域设置中返回月份和工作日名称。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为unicode返回。
注意
在formatweekday()
和formatmonthname()
这两个类的方法当前区域临时改变为给定的语言环境。由于当前区域设置是进程范围的设置,因此它们不是线程安全的。
对于简单的文本日历,此模块提供以下功能。
calendar.
weekdaysetfirstweekday(
)
- 将工作日(
0
星期一,6
星期日)设置为每周开始。值MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
,SATURDAY
,和SUNDAY
被提供了方便。例如,要将第一个工作日设置为星期日:import calendar calendar.setfirstweekday(calendar.SUNDAY)
calendar.
firstweekday()
- 返回每周开始的工作日的当前设置。
calendar.
isleap(year)
True
如果年份是闰年,则返回,否则返回False
。
calendar.
leapdays(y1,y2)
- 返回y1到y2(不包括)范围内的闰年数,其中y1和y2是年。
此功能适用于跨越一个世纪变化的范围。
calendar.
weekday(year, month, day)
- 返回年(- …), 月(- ),日(- )的星期几(
0
星期一)。1970
1
12
1
31
calendar.
weekheader(n)
- 返回包含缩写的工作日名称的标题。n指定一个工作日的字符宽度。
calendar.
monthrange(year, month)
- 返回指定年份和月份的月份第一天的工作日和月份的天数。
calendar.
monthcalendar(year, month)
- 返回表示月份日历的矩阵。 每行代表一周; 以零表示的月份 a 以外的天数。 每周从星期一开始,除非由 setfirstweekday() 设置。
calendar.
theyearprmonth(
themonth,
w=0,
l=0,
)
- 打印由 month() 返回的一个月的日历。
calendar.
theyearmonth(
themonth,
w=0,
l=0,
)
- 使用 TextCalendar 类的 formatmonth() 以多行字符串形式返回一个月的日历。
calendar.
yearprcal(
w=0,
l=0,
c=6,
m=3,
)
- 打印由 calendar() 返回的一整年的日历。
calendar.
yearcalendar(
w=2,
l=1,
c=6,
m=3,
)
- 使用 TextCalendar 类的 formatyear() 将一整年的 3 列日历作为多行字符串返回。
calendar.
tupletimegm(
)
- 一个不相关但方便的函数,它采用时间元组,例如由 time 模块中的 gmtime() 函数返回,并返回相应的 Unix 时间戳值,假设 1970 年和 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] 是空字符串。
也可以看看
- Module
datetime
- 面向对象的日期和时间接口,具有与
time
模块类似的功能 。 - Module
time
- 低级时间相关功能。