第四章:日期和时间-calendar:处理时间-计算日期

4.3.3 计算日期

尽管calendar模块主要强调采用不同格式打印完整的日历,但它还是提供了另外一些函数,对采用其他方式处理日期很有用,如为一个重复时间计算日期。例如,Python Atlanta用户组每月的第二个星期四会召开一次会议。要计算一年中的会议日期,可以使用monthcalendar()的返回值。

import calendar
import pprint

pprint.pprint(calendar.monthcalendar(2019,2))

有些日期的值为0这说明这几天对应的星期几尽管在给定的当前月份里,但它们实际上属于另一个月。
运行结果:
在这里插入图片描述
一周中的第一天默认为星期一。可以通过调用setfirstweekday()来改变这个设置,不过由于calendar模块包含了一些常量来索引monthcalendar()返回的日期区间,所以在这种情况下更方便的做法是跳过这一步。
要计算一年的会议日期,假设是每个月的第二个星期四,那么可以查看monthcalendar()的输出,找到星期四对应的日期。一个月的第一周和最后一周都要填充0值作为占位符,分别表示相应日期实际上在前一个月或下一个月。例如,如果一个月从星期五开始,那么第一周星期四位置上的值就是0。

# calendar_secondthursday.py
import calendar
import sys

year = int(sys.argv[1])

# Show every month.
for month in range(1,13):

    # Compute the dates for each week that overlaps the month.
    c = calendar.monthcalendar(year,month)
    first_week = c[0]
    second_week = c[1]
    third_week = c[2]

    # If there is a Thursday in the first week.
    # the secind 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('{:>3}: {:>2}'.format(calendar.month_abbr[month],meeting_date))

所以,这一年的会议日程为:
在这里插入图片描述
注:calendar_secondthursday.py文件必须在命令行模式下运行。否则,sys.argv[1]会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值