我如何以秒为单位检查两个日期之间的差异?

肯定有更简单的方法。我有一些需要经常刷新的对象,所以我想记录它们创建的时间,检查当前的时间戳,并在必要时刷新。

datetime。datetime已被证明是困难的,我不想深入研究ctime库。这类事情还有更简单的吗?

277355 次浏览
import time
current = time.time()


...job...
end = time.time()
diff = end - current

这对你有用吗?

>>> from datetime import datetime


>>>  a = datetime.now()


# wait a bit
>>> b = datetime.now()


>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7将是你在上面等待的时间)

我找到了datetime。Datetime非常有用,所以如果你遇到了复杂或尴尬的情况,请告诉我们。

编辑:感谢@WoLpH指出,人们并不总是需要如此频繁地刷新,以至于日期时间会很接近。通过计算增量中的天数,可以处理更长的时间戳差异:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800

如果你想计算两个已知日期之间的差值,可以像这样使用total_seconds:

import datetime as dt


a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)


(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

0

我们在Python 2.7中有total_seconds()函数 请参阅下面python 2.6

的代码
import datetime
import time


def diffdates(d1, d2):
#Date format: %Y-%m-%d %H:%M:%S
return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))


d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)

这是一个对我有用的。

from datetime import datetime


date_format = "%H:%M:%S"


# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00')
time_end = str('18:00:00')


# Then get the difference here.
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)


# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

希望这能有所帮助!

另一种方法是使用时间戳值:

end_time.timestamp() - start_time.timestamp()

通过阅读源代码,我得出了一个结论:时间差不能通过.seconds获得:

@property
def seconds(self):
"""seconds"""
return self._seconds


# in the `__new__`, you can find the `seconds` is modulo by the total number of seconds in a day
def __new__(cls, days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0):
seconds += minutes*60 + hours*3600
# ...
if isinstance(microseconds, float):
microseconds = round(microseconds + usdouble)
seconds, microseconds = divmod(microseconds, 1000000)
# ! 👇
days, seconds = divmod(seconds, 24*3600)
d += days
s += seconds
else:
microseconds = int(microseconds)
seconds, microseconds = divmod(microseconds, 1000000)
# ! 👇
days, seconds = divmod(seconds, 24*3600)
d += days
s += seconds
microseconds = round(microseconds + usdouble)
# ...

Total_seconds可以获得两个时间之间的准确差值

def total_seconds(self):
"""Total seconds in the duration."""
return ((self.days * 86400 + self.seconds) * 10**6 +
self.microseconds) / 10**6

结论:

from datetime import datetime
dt1 = datetime.now()
dt2 = datetime.now()


print((dt2 - dt1).total_seconds())