2016-06-29 4 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 

しかし、これは、この行time.mktime(datetime_older)時にこのエラーTypeError: argument must be 9-item sequence, not datetime.datetime を与えます。 これを修正する方法がわかりません。助けてください。

+0

「time.mktime」をなぜ呼び出すのかわかりません。あなたはすでに日付時刻を持っています、あなたはお互いからそれらを引くことができます。 –

+0

私はそれを時間に変換し、秒で差を見つけるために減算すると思った、私は直接日付を引くことができるとは知らなかった – Babel

答えて

3

datetimeを両方とも減算すると、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

私はこれが必要だと思います。すでにdatetimesを持っているので、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を使用することができます。これは、同じことをする別の方法です。 –

関連する問題