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天也是两周。