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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM