美文网首页
时间处理相关杂记

时间处理相关杂记

作者: 码农小杨 | 来源:发表于2018-02-06 16:36 被阅读0次
    1. 时间间隔timedelta的扩展使用

    我们在处理时间间隔的时候,肯定都使用过timedelta进行时间的加减。

    In [11]: from datetime import datetime
    
    In [12]: now = datetime(2018,2,6) 
    
    In [13]: from datetime import timedelta
    
    In [14]: now + timedelta(days=1)
    Out[14]: datetime.datetime(2018, 2, 7, 0, 0)
    

    但是当我们进行月份相加的时候就会报错

    In [15]: now + timedelta(months=1) 
    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    <ipython-input-15-73ad8099010f> in <module>()
    ----> 1 now + timedelta(months=1)
    
    TypeError: 'months' is an invalid keyword argument for this function
    

    类似的时间计算可以使用 dateutil.relativedelta() 函数代替

    In [18]: from dateutil.relativedelta import relativedelta 
    
    In [19]: now + relativedelta(months=1) 
    Out[19]: datetime.datetime(2018, 3, 6, 0, 0)
    

    还能进行差值月份统计

    In [23]: b = datetime(2018, 1,2) 
    
    In [24]: now - b 
    Out[24]: datetime.timedelta(35)
    
    In [25]: d = relativedelta(now,b) 
    
    In [26]: d
    Out[26]: relativedelta(months=+1, days=+4)
    
    In [27]: d.months
    Out[27]: 1
    
    In [28]: d.days
    Out[28]: 4
    
    1. 有关将字符串转为时间类型
      大家都知道我们可以使用strptime将字符串转为时间格式
    In [29]: from datetime import datetime
    
    In [30]: text = '2018-02-06' 
    
    In [31]: y = datetime.strptime(text, '%Y-%m-%d') 
    
    In [32]: y 
    Out[32]: datetime.datetime(2018, 2, 6, 0, 0)
    

    需要注意的是, strptime() 的性能要比你想象中的差很多, 因为它是使用纯Python实现,并且必须处理所有的系统本地设置。 如果你要在代码中需要解析大量的日期并且已经知道了日期字符串的确切格式,可以自己实现一套解析方案来获取更好的性能。 比如,如果你已经知道所以日期格式是 YYYY-MM-DD ,你可以像下面这样实现一个解析函数:

    In [33]: from datetime import datetime
    
    In [34]: def parse_ymd(s): 
        ...:     year_s, mon_s, day_s = s.split('-') 
        ...:     return datetime(int(year_s), int(mon_s), int(day_s)) 
        ...: 
    
    In [35]: parse_ymd(text) 
    Out[35]: datetime.datetime(2018, 2, 6, 0, 0)
    

    实际测试中,这个函数比 datetime.strptime() 快7倍多。 如果你要处理大量的涉及到日期的数据的话,那么最好考虑下这个方案!

    相关文章

      网友评论

          本文标题:时间处理相关杂记

          本文链接:https://www.haomeiwen.com/subject/ukigzxtx.html