python上的日期时间差异

时间:2016-06-29 12:50:13

标签: python date datetime

我有DateTime,来自字符串我在IS0格式示例中转换它们。 ISODate("2016-06-24T09:07:31.097Z")

我想使用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)。 我不知道如何修复它?请帮忙。

2 个答案:

答案 0 :(得分: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在启用真正除法的情况下计算。

答案 1 :(得分: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