[Python标准库]calendar——处理日期
2016-01-13 22:10
681 查看
[Python标准库]calendar——处理日期
作用:calendar 模块实现了一些类来处理日期,管理面向年、月和周的值。
Python 版本:1.4 版本,2.5 中做了更新
calendar 模块定义了 Calendar 类,其中封装了一些值的计算,如给定一个月或一年中的周几。另外,TextCalendar 和 HTMLCalendar 类可以生成经过预格式化的输出。
格式化示例
prmonth() 方法是一个简单的函数,可以生成一个月的格式化文本输出。
这个例子按照美国的惯例,将 TextCalendar 配置为一周从星期日开始。默认会使用欧洲惯例,即一周从星期一开始。
利用 HTMLCalendar 和 formatmonth() 可以生成一个类似的 HTML 表格。显示的输出看起来与纯文本的版本大致是一样的,不过会用 HTML 标记包围。各个表单元格有一个类属性对应星期几,所以可以通过 CSS 指定 HTML 样式。
要使用可用默认格式之外的某种格式生成输出,可以使用 calendar 计算日期,并把这些值组织为周和月,然后迭代处理结果。对于这个任务,Calendar 的 weekheader()、monthcalendar() 和 yeardays2calendar() 方法尤其有用。
调用 yeardays2calendar() 会生成一个由“月栏”列表构成的序列。每个列表包含一些月,每个月是一个周列表。周是元组列表,元组则由日编号(1~31)和星期几(0~6)构成。当月以外的日编号为 0。
调用 yeardays2calendar(2011, 3) 会返回 2011 年的数据,按每栏 3 个月组织。
这等价于 formatyear() 使用的数据。
day_name、day_abbr、month_name 和 month_abbr 模块属性对于生成定制格式的输出很有用(例如,在 HTML 输出中包含链接)。这些属性会针对当前本地化环境正确地自动配置。
计算日期
尽管 calendar 模块主要强调采用不同格式打印完整的日历,它还提供了另外一些函数,对采用其他方式处理日期很有用,如为一个重复事件计算日期。例如,Python Atlanta Users Group 每月的第二个星期四会召开一次会议。要计算一年中的会议日期,可以使用 monthcalendar() 的返回值。
有些日期的值为 0。这说明尽管这几天属于另一个月,但与给定的当前月中的几天同属一个星期。
一周中的第一天默认为星期一。可以通过调用 setfirstweekday() 改变这个设置,不过由于 calendar 模块包含一些常量来索引 monthcalendar() 返回的日期区间,所以在这种情况下跳过这一步会更方便。
要计算 2011 年的会议日期,假设是每个月的第二个星期四,0 值指示第一周的星期四是否包含在这个月内(或者不包含在这个月中,比如这个月从星期五开始)。
作用:calendar 模块实现了一些类来处理日期,管理面向年、月和周的值。
Python 版本:1.4 版本,2.5 中做了更新
calendar 模块定义了 Calendar 类,其中封装了一些值的计算,如给定一个月或一年中的周几。另外,TextCalendar 和 HTMLCalendar 类可以生成经过预格式化的输出。
格式化示例
prmonth() 方法是一个简单的函数,可以生成一个月的格式化文本输出。
import calendar c = calendar.TextCalendar(calendar.SUNDAY) c.prmonth(2011, 7)
这个例子按照美国的惯例,将 TextCalendar 配置为一周从星期日开始。默认会使用欧洲惯例,即一周从星期一开始。
利用 HTMLCalendar 和 formatmonth() 可以生成一个类似的 HTML 表格。显示的输出看起来与纯文本的版本大致是一样的,不过会用 HTML 标记包围。各个表单元格有一个类属性对应星期几,所以可以通过 CSS 指定 HTML 样式。
要使用可用默认格式之外的某种格式生成输出,可以使用 calendar 计算日期,并把这些值组织为周和月,然后迭代处理结果。对于这个任务,Calendar 的 weekheader()、monthcalendar() 和 yeardays2calendar() 方法尤其有用。
调用 yeardays2calendar() 会生成一个由“月栏”列表构成的序列。每个列表包含一些月,每个月是一个周列表。周是元组列表,元组则由日编号(1~31)和星期几(0~6)构成。当月以外的日编号为 0。
import calendar import pprint cal = calendar.Calendar(calendar.SUNDAY) cal_data = cal.yeardays2calendar(2011, 3) print 'len(cal_data) :', len(cal_data) top_months = cal_data[0] print 'len(top_months) :', len(top_months) first_month = top_months[0] print 'len(first_month) :', len(first_month) print 'first_month:' pprint.pprint(first_month)
调用 yeardays2calendar(2011, 3) 会返回 2011 年的数据,按每栏 3 个月组织。
这等价于 formatyear() 使用的数据。
import calendar cal = calendar.TextCalendar(calendar.SUNDAY) print cal.formatyear(2011, 2, 1, 1, 3)
day_name、day_abbr、month_name 和 month_abbr 模块属性对于生成定制格式的输出很有用(例如,在 HTML 输出中包含链接)。这些属性会针对当前本地化环境正确地自动配置。
计算日期
尽管 calendar 模块主要强调采用不同格式打印完整的日历,它还提供了另外一些函数,对采用其他方式处理日期很有用,如为一个重复事件计算日期。例如,Python Atlanta Users Group 每月的第二个星期四会召开一次会议。要计算一年中的会议日期,可以使用 monthcalendar() 的返回值。
import calendar import pprint pprint.pprint(calendar.monthcalendar(2011, 7))
有些日期的值为 0。这说明尽管这几天属于另一个月,但与给定的当前月中的几天同属一个星期。
一周中的第一天默认为星期一。可以通过调用 setfirstweekday() 改变这个设置,不过由于 calendar 模块包含一些常量来索引 monthcalendar() 返回的日期区间,所以在这种情况下跳过这一步会更方便。
要计算 2011 年的会议日期,假设是每个月的第二个星期四,0 值指示第一周的星期四是否包含在这个月内(或者不包含在这个月中,比如这个月从星期五开始)。
import calendar # Show every month for month in range(1, 13): # Compute the dates for each week that overlaps the month c = calendar.monthcalendar(2011, month) first_week = c[0] second_week = c[1] third_week = c[2] # If there is a Thursday in the first week, the second Thursday # is in the second week. Otherwise, the second Thursday must # be in the third week. if first_week[calendar.THURSDAY]: meeting_date = second_week[calendar.THURSDAY] else: meeting_date = third_week[calendar.THURSDAY] print '%3s: %2s' % (calendar.month_abbr[month], meeting_date)
相关文章推荐
- python有关的书签
- Python 2.5.12 匿名函数
- 关于《selenium2自动测试实战--基于Python语言》
- python实现堆排序
- 使用国内镜像源来加速python pypi包的安装
- 在python下安装这个第三方库numpy、scipy、matplotlib
- Python 2.5.11 返回函数
- Python---索引
- python动态生成写文件变量
- Win7 python2.7 Scrapy的安装
- python基础知识-列表,元组,字典
- Python在IDLE环境下常用快捷键
- numpy的argsort和sum和tile函数
- python学习之3 数据库sqlite
- Python垃圾回收机制详解
- 【Python】Python中中文的字符串格式化对齐
- python学习之2 正则表达式re
- python---购物扩展
- python学习笔记 - 初识socket
- 有用的Python代码片段