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( )
也是没有问题的。我个人喜欢给尺子命名因为觉得它有些奇怪,不过它是如此的强大以至于我不能离开它了。
给定两个时间,你需要计算它们间相差几周。
讨论:
同样的,标准库中的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( )
也是没有问题的。我个人喜欢给尺子命名因为觉得它有些奇怪,不过它是如此的强大以至于我不能离开它了。
标签: Python