[Python标准库]calendar——处理日期

来源:互联网 发布:淘宝多久删除炒作评价 编辑:程序博客网 时间:2024/06/08 07:01
[Python标准库]calendar——处理日期
        作用:calendar 模块实现了一些类来处理日期,管理面向年、月和周的值。
        Python 版本:1.4 版本,2.5 中做了更新
        calendar 模块定义了 Calendar 类,其中封装了一些值的计算,如给定一个月或一年中的周几。另外,TextCalendar 和 HTMLCalendar 类可以生成经过预格式化的输出。
格式化示例
        prmonth() 方法是一个简单的函数,可以生成一个月的格式化文本输出。
import calendarc = 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 calendarimport pprintcal = 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 calendarcal = 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 calendarimport pprintpprint.pprint(calendar.monthcalendar(2011, 7))
        有些日期的值为 0。这说明尽管这几天属于另一个月,但与给定的当前月中的几天同属一个星期。
        一周中的第一天默认为星期一。可以通过调用 setfirstweekday() 改变这个设置,不过由于 calendar 模块包含一些常量来索引 monthcalendar() 返回的日期区间,所以在这种情况下跳过这一步会更方便。
        要计算 2011 年的会议日期,假设是每个月的第二个星期四,0 值指示第一周的星期四是否包含在这个月内(或者不包含在这个月中,比如这个月从星期五开始)。
import calendar# Show every monthfor 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)
0 0
原创粉丝点击