python中timedelta方法怎麼用

2021-03-19 18:20:45 字數 3988 閱讀 7705

1樓:匿名使用者

#! /usr/bin/python# coding=utf-8from 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年前'''

# -*- 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:

『』『當前的時間上加一天或一年減一天等操作』『』

#!/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)

#使用replace()代替日期加減

from datetime import datetime

now1 = datetime.now()

now1     # datetime.datetime(2017, 2, 10, 22, 29, 48, 288500)

# 增加一天或減少一天

now2 = now1.replace(day=9)

now2  # datetime.datetime(2017, 2, 9, 22, 29, 48, 288500)

# timestrap() 函式是把日期轉化為時間戳,時間戳就是秒數

time_span = now1.timestrap() - now2.timestrap()/(24*3600)

time_span # 1

日期常用問題

1: datetime中offset-*****與offset-aware時間的計算

在使用django時,預設是開啟對多時區的支援的,在獲取時間的時候會是如下形式:

datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=)

1234>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=)>>> localtime(dt)datetime.datetime(2014, 4, 18, 23, 37, 7, tzinfo=)

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

123>>> import datetime>>> now = datetime.datetime.now()>>> now - dt

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

123traceback (most recent call last):  file "", line 1, in typeerror: can't subtract offset-***** and offset-aware datetimes

問題就出在利用datetime.datetime.now()得到的當前時間是offset-*****的,而另外一個卻是offset-aware的,因此我們需要將這裡的dt轉成與now一樣的形式,可以這麼做:

12345>>> dt = dt.replace(tzinfo=none)>>> dtdatetime.datetime(2014, 4, 18, 15, 37, 7)>>> now - dtdatetime.

timedelta(0, 34108, 443000)

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

from django.utiles import timezone

from datetime

t1 = timezone.now()

# torrow

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

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

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)

python問題,python中的,問題?

反轉一個list,返回一個迭代器 iterator 如 range 10 0,1,2,3,4,5,6,7,8,9 reversed range 10 x for x in reversed range 10 9,8,7,6,5,4,3,2,1,0 還可以這樣完成反轉 range 10 1 9,8,7...

python中的小問題,python中的一個小問題

函式遞迴呼叫的終止條件是引數n為0的時候,那你要保證n是整型。階乘本來就是整數的運算。符點數是不精確的,不建議用 來判斷是否和某個值相等,也即是n 0是基本上不會成立的。python中一個小問題 第一行你寫的是tempstr,s打的小寫的。下面成了大寫的 關於python的一個小問題 20 pyth...

python轉義雙引號,python中如何輸出引號

為啥一定都用雙引號呢?gp.calculatefield management a,type 林地 外面是單引號,裡面可以直接使用雙引號,不必轉義 如果使用變數代替可以這樣 a 林地 b s a gp.calculatefield management a,type b 也可以這樣 a 林地 b a...