python Cookbook 读书笔记--时间和财务计算

  • 计算昨天和明天的日期

   当遇到有关时间变化或者时间差的问题,优先考虑timedelta:

    

import datetime
today=datetime.data.today()
yesterday=today-datetime.timedelta(days=1)
tomorrow=today+datetime.timedelta(days=1)
print yesterday,today,tomorrow

这里很重要的一个问题就是不能想当然。。。书上列举了一个例子:yesterday=today-1,看似符合python的逻辑,实则不然。你无法理解-1到底是减去一天、一分钟还是一年。

因此,我们应该用timedelta把时间差封装起来

datetime.timedelta(days=365)#一年的时间

datetime.timedelta(seconds=1) #一秒的时间

datetime.tiemdelta(seconds=3600)  #一个小时的时间

datetime.timedelta(weeks=1)  #一周的时间
  • 寻找上一个星期五

代码的思想很简单。获取今天日期的状态,判断是否为星期五,是的话就输出,不是则往前移动一天,继续判断,如此循环。

这之中要注意的是,weekday()print后的是整数值,譬如今天星期一,我试了下打印的是0,那么在判断时可以用0-6对其判断,或者采取书上的方法:

导入Python标准库的calendar模块,利用calendar.FRIDAY属性。详见代码

1 import datetime,calendar
2 lastFriday=datetime.date.today()
3 oneday=datetime.timedelta(days=1)
4 while lastFriday.weekday()!=calendar.FRIDAY:
5     lastFriday-=oneday
6 print lastFriday.strftime('%A,%d-%b-%Y')
  • 计算日期之间的时段

标准的datetime和第三方的dateutil模块(准确说是dateutil和rrule.count方法)很易于使用。直接上代码吧

from dateutil import rrule
import datetime

def weeks_between(strat_date,end_date):
    weeks=rrule.rrule(rrule.WEEKLY,dtstart=start_date,until=end_date)
    return weeks.count()

函数weeks_between用一个开始日期和一个结束日期作为参数,并实例化一个规则用于计算两者之间的的周数,最后返回此规则的count方法的结果。结果向上取整,9天也是两周,13天也是两周。

posted @ 2012-11-19 16:16  Nobodybing  阅读(353)  评论(0编辑  收藏  举报