如何在两个datetime对象之间以分钟为单位区分时间?


当前回答

要得到小时、分和秒,你可以这样做

>>> import datetime
>>> first_time = datetime.datetime.now()
>>> later_time = datetime.datetime.now()
>>> difference = later_time - first_time
>>> m, s = divmod(difference.total_seconds(), 60)
>>> print("H:M:S is {}:{}:{}".format(m//60, m%60, s))

其他回答

如果a, b是datetime对象,那么在Python 3中查找它们之间的时间差:

from datetime import timedelta

time_difference = a - b
time_difference_in_minutes = time_difference / timedelta(minutes=1)

在早期的Python版本中:

time_difference_in_minutes = time_difference.total_seconds() / 60

如果a, b是天真的datetime对象,例如datetime.now()返回的,那么如果对象表示具有不同UTC偏移量的本地时间,例如DST转换前后或过去/未来日期,则结果可能是错误的。更多细节:查找datetimes之间是否已经过了24小时- Python。

要获得可靠的结果,请使用UTC时间或时区感知的datetime对象。

只要用一个减去另一个。你会得到一个timedelta对象。

>>> import datetime
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now() # after a 5-second or so pause
>>> d2 - d1
datetime.timedelta(0, 5, 203000)
>>> dd = d2 - d1
>>> print (dd.days) # get days
>>> print (dd.seconds) # get seconds
>>> print (dd.microseconds) # get microseconds
>>> print (int(round(dd.total_seconds()/60, 0))) # get minutes
>>> import datetime
>>> first_time = datetime.datetime.now()
>>> later_time = datetime.datetime.now()
>>> difference = later_time - first_time
datetime.timedelta(0, 8, 562000)
>>> seconds_in_day = 24 * 60 * 60
>>> divmod(difference.days * seconds_in_day + difference.seconds, 60)
(0, 8)      # 0 minutes, 8 seconds

从第一个时间差中减去后面的时间= later_time - first_time创建一个只保存时间差的datetime对象。 在上面的例子中,它是0分钟,8秒和562000微秒。

这将给出以秒为单位的差值(然后除以60得到分钟):

import time
import datetime

t_start = datetime.datetime.now()

time.sleep(10)

t_end = datetime.datetime.now()
elapsedTime = (t_end - t_start )

print(elapsedTime.total_seconds())

输出:

10.009222

在我看来,这是最简单的方法,您不需要担心精度或溢出问题。

例如,使用elapsedTime。秒你失去了很多精度(它返回一个整数)。同时,elapsedTime。正如这个答案所指出的,微秒的上限是10^6。因此,例如,对于10秒的sleep(), elapsedTime。微秒给出8325(这是错误的,应该是10,000,000左右)。

用其他方法得到日期之间的差异;

import dateutil.parser
import datetime
last_sent_date = "" # date string
timeDifference = current_date - dateutil.parser.parse(last_sent_date)
time_difference_in_minutes = (int(timeDifference.days) * 24 * 60) + int((timeDifference.seconds) / 60)

得到最小值的输出。

谢谢