zoukankan      html  css  js  c++  java
  • Python timedelta

    datetime.timedelta对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象。
     
    构造函数
    class datetime.timedelta([days[seconds[microseconds[milliseconds[minutes[hours[weeks]]]]]]])
    所有参数可选,且默认都是0,参数的值可以是整数,浮点数,正数或负数。
     
    内部只存储days,seconds,microseconds,其他参数的值会自动按如下规则抓转换:
     
    • 1 millisecond(毫秒) 转换成 1000 microseconds(微秒)
    • 1 minute 转换成 60 seconds
    • 1 hour 转换成 3600 seconds
    • 1 week转换成 7 days
    三个参数的取值范围分别为:
     
    • 0 <= microseconds < 1000000
    • 0 <= seconds < 3600*24 (the number of seconds in one day)
    • -999999999 <= days <= 999999999
    如果任意参数是float,且小数点后含有microseconds部分,那么microseconds的值为所有参数的微秒部分的总和(四舍五入)如:
    Python代码 复制代码 收藏代码
    1. >>> datetime.timedelta(hours=1.232,seconds=20).microseconds   
    2. 200000  
    3. >>> datetime.timedelta(hours=1.232,seconds=20.3).microseconds   
    4. 500000  
    >>> datetime.timedelta(hours=1.232,seconds=20).microseconds
    200000
    >>> datetime.timedelta(hours=1.232,seconds=20.3).microseconds
    500000

     

    支持的操作有:

    1 = t2 + t3 两个timedelta对象相加,同时满足 t1-t2 == t3 and t1-t3 == t2 为True
    t1 = t2 - t3 两个timedelta对象相减, 同时满足 t1 == t2 - t3 and t2 == t1 + t3 为True
    t1 = t2 * i or t1 = i * t2 timedelta对象分别乘以i 同时满足 t1 // i == t2 为True, 且 i != 0
    t1 = t2 // i 向下取整,余数部分被丢弃
    +t1 返回和t1相同值的timedelta对象
    -t1 取反操作,等价于timedelta(-t1.days, -t1.seconds, -t1.microseconds)和 t1* -1
    abs(t) 绝对值,等价于: +t 当 t.days >= 0,  -t 当 t.days < 0
    str(t) 返回字符串,格式为: [D day[s], ][H]H:MM:SS[.UUUUUU]
    repr(t) 返回字符串,格式为: datetime.timedelta(D[, S[, U]])

     

    此外,timedelta和可以和date,datetime对象进行加减操作,如:
    Python代码 复制代码 收藏代码
    1. >>> datetime.datetime.now()   
    2. datetime.datetime(2013523104927182057)   
    3. >>> datetime.datetime.now()+datetime.timedelta(2)   
    4. datetime.datetime(2013525104929385559)  
    >>> datetime.datetime.now()
    datetime.datetime(2013, 5, 23, 10, 49, 27, 182057)
    >>> datetime.datetime.now()+datetime.timedelta(2)
    datetime.datetime(2013, 5, 25, 10, 49, 29, 385559)
     
    Python2.7新增了方法:
     
    timedelta.total_seconds()
    用于计算秒数。等价于:(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
     
    实例1:
    '''时间d距离now()的长度,比如:1分钟前,1小时前,1月前,1年前'''
     
    Python代码 复制代码 收藏代码
    1. # -*- encoding=UTF-8 -*-   
    2. import datetime   
    3. def timebefore(d):   
    4.      chunks = (   
    5.                        (60 * 60 * 24 * 365, u'年'),   
    6.                        (60 * 60 * 24 * 30, u'月'),   
    7.                        (60 * 60 * 24 * 7, u'周'),   
    8.                        (60 * 60 * 24, u'天'),   
    9.                        (60 * 60, u'小时'),   
    10.                        (60, u'分钟'),   
    11.      )   
    12.      #如果不是datetime类型转换后与datetime比较   
    13.     if not isinstance(d, datetime.datetime):   
    14.            d = datetime.datetime(d.year,d.month,d.day)   
    15.     now = datetime.datetime.now()   
    16.     delta = now - d   
    17.     #忽略毫秒   
    18.     before = delta.days * 24 * 60 * 60 + delta.seconds  #python2.7直接调用 delta.total_seconds()   
    19.     #刚刚过去的1分钟   
    20.     if before <= 60:   
    21.            return u'刚刚'  
    22.     for seconds,unit in chunks:   
    23.            count = before // seconds   
    24.            if count != 0:   
    25.                  break  
    26.     return unicode(count)+unit+u"前"  
    # -*- encoding=UTF-8 -*-
    import datetime
    def timebefore(d):
         chunks = (
                           (60 * 60 * 24 * 365, u'年'),
                           (60 * 60 * 24 * 30, u'月'),
                           (60 * 60 * 24 * 7, u'周'),
                           (60 * 60 * 24, u'天'),
                           (60 * 60, u'小时'),
                           (60, u'分钟'),
         )
         #如果不是datetime类型转换后与datetime比较
        if not isinstance(d, datetime.datetime):
               d = datetime.datetime(d.year,d.month,d.day)
        now = datetime.datetime.now()
        delta = now - d
        #忽略毫秒
        before = delta.days * 24 * 60 * 60 + delta.seconds  #python2.7直接调用 delta.total_seconds()
        #刚刚过去的1分钟
        if before <= 60:
               return u'刚刚'
        for seconds,unit in chunks:
               count = before // seconds
               if count != 0:
                     break
        return unicode(count)+unit+u"前"

     实例2:

    ‘’‘当前的时间上加一天或一年减一天等操作’‘’

     

    Python代码 复制代码 收藏代码
    1. #!/usr/bin/env python   
    2. # -*- coding:utf-8 -*-   
    3.   
    4. from datetime import datetime,timedelta   
    5.   
    6. now = datetime.now()   
    7.   
    8. yestoday = now - timedelta(days=1)   
    9. tommorow = now + timedelta(days=1)   
    10.   
    11. next_year = now + timedelta(days = 365)  
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    from datetime import datetime,timedelta
    
    now = datetime.now()
    
    yestoday = now - timedelta(days=1)
    tommorow = now + timedelta(days=1)
    
    next_year = now + timedelta(days = 365)
    

     

     参考:http://docs.python.org/2/library/datetime.html

     
  • 相关阅读:
    linux利用grep查看打印匹配的下几行或前后几行的命令
    Linux NetHogs监控工具介绍
    db2 查看进程 db2中的常用命令及使用方法
    Linux python <tab>自动补全
    Saltstack pillar组件
    History(历史)命令用法
    Saltstack grains组件
    Saltstack常用模块及API
    文本处理三剑客之AWK的用法
    linux程序调试命令strace
  • 原文地址:https://www.cnblogs.com/noobkey/p/3590331.html
Copyright © 2011-2022 走看看