timedelta函数和relativedelta

时间问题是一个经常会遇到的问题,我们在使用python处理时间问题时最长用的是time和datetime这两个模块,一般来讲,这两个模块足以解决工作中遇到的大部分问题了,但是基于两个原因,今天来记录一下另外一个模块---relativedelta的运用,原因一:后者较前者来说功能更加全面而强大,原因二:即便是相同的功能,后者较前者相对简单快捷。

首先讲一下经常碰到的时间差,关于时间的加减的问题:


datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

先讲一下这个timedelta模块,如上,参数部分就是上面这些。观察这些参数你会有所发现,就是缺少月和年,这也为后面的relativedelta的方便快捷埋下伏笔。

看一下怎么运用:

#计算时间差
d1 = datetime.datetime.strptime('2012-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2012-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print( delta.days)


#计算相对时间
now = datetime.datetime.now()
delta = datetime.timedelta(days=3)
n_days = now + delta
print (n_days.strftime('%Y-%m-%d %H:%M:%S'))

ps:在用这个模块之前一定要把时间格式转换正确,有一个问题就是,如果我想知道一个月后的时间日期,该怎么办?,days=30?那1、3、5、7这些特殊的月份呢?还有一个更加特殊的2月份呢?还有考虑平闰年问题呢?怎么解决呢?或许你能解决,但是会发现麻烦很多,这个时候relativedelta就可以为你解决这些麻烦了。

这个相对时间差,查看源码可以看到如下:

    def __init__(self, dt1=None, dt2=None,
                 years=0, months=0, days=0, leapdays=0, weeks=0,
                 hours=0, minutes=0, seconds=0, microseconds=0,
                 year=None, month=None, day=None, weekday=None,
                 yearday=None, nlyearday=None,
                 hour=None, minute=None, second=None, microsecond=None):

看到定义的参数,是不是已经赢了,而且相对时间差会根据月份的情况自己调整,不需要你再去考虑是30天还是31天,是2月还是其他,是闰年还是平年,是不是给你省去来乐很多的烦恼。

接下来看一下怎么去运用:

#导入模块
from dateutil.relativedelta import relativedelta

#计算相对时间差
relativedelta(datetime1, datetime2)#注意时间格式


#一年后
>>> date(2000,2,28)+relativedelta(years=+1)
datetime.date(2001, 2, 28)
#一个月后
>>> date(2003,1,27)+relativedelta(months=+1)
datetime.date(2003, 2, 27)
#下一个周五
>>> TODAY+relativedelta(weekday=FR)
datetime.date(2003, 9, 19)

>>> TODAY+relativedelta(weekday=calendar.FRIDAY)
datetime.date(2003, 9, 19)

#这个月的最后一个周五
>>> TODAY+relativedelta(day=31, weekday=FR(-1))
datetime.date(2003, 9, 26)

#一周后
>>> TODAY+relativedelta(weekday=WE(+1))
datetime.date(2003, 9, 17)

更多更细节的用法大家自己来探索吧,最后附上一个英文文档,习惯的可以看一下。

  • 11
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值