2007-08-08

 

Python Cookbook 3.3 在一个时间范围内计算时间差

需求:

给定两个时间,你需要计算它们间相差几周。

讨论:

同样的,标准库中的datetime和第三方包dateutil都是十分方便的(尤其是dateutil的rrule.count方法).当引入和合适的包后,工作变得异常简单:

from dateutil import rrule
import datetime
def weeks_between(start_date, end_date):
    weeks = rrule.rrule(rrule.WEEKLY, dtstart=start_date, until=end_date)
    return weeks.count( )

函数weeks_between使用起始和终止时间作为参数,初始化一个尺子来测量它们之间的差值,然后返回。写代码比描述起来还要方便。这个方法仅仅返回一个整数,比如,8天被认为是2周。很容易来测试一下这个代码:

if _ _name_ _=='_ _main_ _':
    starts = [datetime.date(2005, 01, 04), datetime.date(2005, 01, 03)]
    end = datetime.date(2005, 01, 10)
    for s in starts:
        days = rrule.rrule(rrule.DAILY, dtstart=s, until=end).count( )
        print "%d days shows as %d weeks "% (days, weeks_between(s, end))

测试输出如下:

7 days shows as 1 weeks
8 days shows as 2 weeks

没有必要为尺子取一个名字,如果你不想改变函数体,比如改成一条语句:

return rrule.rrule(rrule.WEEKLY , dtstart=start_date, until=end_date).count( )

也是没有问题的。我个人喜欢给尺子命名因为觉得它有些奇怪,不过它是如此的强大以至于我不能离开它了。

标签:


Comments: 发表评论



<< Home

This page is powered by Blogger. Isn't yours?