2016-06-29 119 views
0

我有DateTime,從字符串我轉換他們在IS0格式的例子。 ISODate("2016-06-24T09:07:31.097Z")Python上的日期時間差異

我想找到使用python它們之間的區別,所以我這樣做:

string_older = "2016-05-18T20:53:43.776456" 
string_young = "2016-05-16T20:53:43.776456" 
datetime_older = datetime.datetime.strptime(string_older, "%Y-%m-%dT%H:%M:%S.%f") //date on ISO format 
datetime_young = datetime.datetime.strptime(string_young, "%Y-%m-%dT%H:%M:%S.%f") //date on ISO format 
a = time.mktime(datetime_older) 
b = time.mktime(datetime_young) 
diff = a - b 
seconds = int(diff) % 60 

但是這給了這個錯誤TypeError: argument must be 9-item sequence, not datetime.datetime 在該行time.mktime(datetime_older)。 我不知道如何解決它?請幫忙。

+0

我不明白你爲什麼要調用'time.mktime'。你已經有日期了,你可以將它們相減。 –

+0

我想把它轉換爲時間,然後減去找到秒差,我不知道我可以直接減去日期 – Babel

回答

3

同時減去datetime s會給你一個timedelta。要以秒爲單位表示差異,請致電total_seconds方法。

string_older = "2016-05-18T20:53:43.776456" 
string_young = "2016-05-16T20:53:43.776456" 
datetime_older = datetime.datetime.strptime(string_older, "%Y-%m-%dT%H:%M:%S.%f") //date on ISO format 
datetime_young = datetime.datetime.strptime(string_young, "%Y-%m-%dT%H:%M:%S.%f") 

timedelta = datetime_older - datetime_young 
seconds = timedelta.total_seconds() 

timedelta。 total_seconds()

返回持續時間中包含的總秒數。相當於(td.microseconds +(td.seconds + td.days * 24 * 3600)* 10 ** 6)/ 10 ** 6在啓用真分度的情況下計算。

+0

非常感謝你 – Babel

0

我想你需要這個;沒有必要使用time.mktime(),因爲你已經有了日期時間。

import time, datetime 
string_older = "2016-05-18T20:53:43.776456" 
string_young = "2016-05-16T20:53:43.776456" 

datetime_older = datetime.datetime.strptime(string_older, "%Y-%m- %dT%H:%M:%S.%f") 
datetime_young = datetime.datetime.strptime(string_young, "%Y-%m-%dT%H:%M:%S.%f") 

c = datetime_older - datetime_young 
print(divmod(c.days * 86400 + c.seconds, 60)) # minutes, seconds 
+0

爲什麼不使用total_seconds? (查看我的回答) –

+0

我們可以使用total_seconds。這只是另一種做同樣事情的方式。 –