Python中時間的處理之——timedelta篇

 
 
#! /usr/bin/python # coding=utf-8 from datetime import datetime,timedelta """ timedelta表明兩個datetime之間的時間差 """ now = datetime.now() past = past = datetime(2010,11,12,13,14,15,16) timespan = now - past #這會獲得一個負數 past - now attrs = [ ("days",""),( 'seconds',""),( 'microseconds',"毫秒") #('min',"最小"),( 'max',"最大"), ] for k,v in attrs: "timespan.%s = %s #%s" % (k,getattr(timespan, k),v) """ 總共相差的秒數 """ timespan.total_seconds() """ 實例化一個timespan 請注意它的參數順序 timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]]) """ timespan = timedelta(days=1) now - timespan #返回的是datetime型 now + timespan timespan * 2 #還能夠乘哦。表明二倍 timespan / 13 #增長一個月 from calendar import monthrange now + timedelta(days=monthrange(start.year,start.month)[1])
 

 

實例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"前"  

 實例2:python

‘’‘當前的時間上加一天或一年減一天等操做’‘’django

 

Python代碼1  收藏代碼
  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)  

 

Python代碼2  收藏代碼
  1. #使用replace()代替日期加減
  2. from datetime import datetime
  3. now1 = datetime.now()
  4.   now1     # datetime.datetime(2017, 2, 10, 22, 29, 48, 288500)
  5. # 增長一天或減小一天 
  6.  now2 = now1.replace(day=9)
  7. now2  # datetime.datetime(2017, 2, 9, 22, 29, 48, 288500)
  8. # timestrap() 函數是把日期轉化爲時間戳,時間戳就是秒數
  9. time_span = now1.timestrap() - now2.timestrap()/(24*3600) 
  10. time_span # 1     

 

日期經常使用問題 app

1: Datetime中offset-naive與offset-aware時間的計算

在使用Django時,默認是開啓對多時區的支持的,在獲取時間的時候會是以下形式:python2.7

datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)函數

咱們能夠利用django.utils.timezone中提供的localtime方法來將該時間轉換爲本地時間:post

1
2
3
4
>>> dt
datetime.datetime( 2014 4 18 15 37 7 , tzinfo = <UTC>)
>>> localtime(dt)
datetime.datetime( 2014 4 18 23 37 7 , tzinfo = <LocalTimezone>)

有時候,咱們須要將該時間與當前時間作比較,例如計算差值,你可能會想到直接這麼作:spa

1
2
3
>>>  import  datetime
>>> now  =  datetime.datetime.now()
>>> now  -  dt

不過這是不對的,並告知以下錯誤:code

1
2
3
Traceback (most recent call last):
   File  "<console>" , line  1 in  <module>
TypeError: can't subtract offset - naive  and  offset - aware datetimes

問題就出在利用datetime.datetime.now()獲得的當前時間是offset-naive的,而另一個倒是offset-aware的,所以咱們須要將這裏的dt轉成與now同樣的形式,能夠這麼作:blog

1
2
3
4
5
>>> dt  =  dt.replace(tzinfo = None )
>>> dt
datetime.datetime( 2014 4 18 15 37 7 )
>>> now  -  dt
datetime.timedelta( 0 34108 443000 )

 

備註:1:timezone 獲取的日期增長和修改(好比加一天減一天) ip

from django.utiles import timezone

from datetime

t1 = timezone.now()

# torrow

t1+datetime.timedelta(days=1,hours=1)

 2:python獲得兩個時間段的每一天的列表

date_list = []
    begin_date = datetime.datetime.strptime(begin_date, "%Y-%m-%d") end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d") while begin_date <= end_date: date_str = begin_date.strftime("%m-%d") date_list.append(date_str) begin_date += datetime.timedelta(days=1) print date_list

# 方法2(安裝boto3 庫 pip install boto3):
from datetime import datetime
from dateutil.rrule import rrule, DAILY

a = datetime(2009, 5, 30)
b = datetime(2009, 6, 9)

for dt in rrule(DAILY, dtstart=a, until=b):
    print dt.strftime("%Y-%m-%d")

# 在原來日期上增長一年

from dateutil.relativedelta import relativedelta
from django.utils import timezone
t1 = timezone.now()
neww_year = t1 + relativedelta(years=1)
相關文章
相關標籤/搜索