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


当前回答

这可能会帮助一些人,用这个方法找到过期与否其计算天数。这是dt。秒和dt。微秒也可用

from datetime import datetime
# updated_at = "2022-10-20T07:18:56.950563"
def is_expired(updated_at):
    expires_in = 7 #days
    datetime_format = '%Y-%m-%dT%H:%M:%S.%f'
    time_difference = datetime.now() - datetime.strptime(updated_at, datetime_format)

    return True if time_difference.days > expires_in else False

其他回答

如果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对象。

我用的是这样的:

from datetime import datetime

def check_time_difference(t1: datetime, t2: datetime):
    t1_date = datetime(
        t1.year,
        t1.month,
        t1.day,
        t1.hour,
        t1.minute,
        t1.second)

    t2_date = datetime(
        t2.year,
        t2.month,
        t2.day,
        t2.hour,
        t2.minute,
        t2.second)

    t_elapsed = t1_date - t2_date

    return t_elapsed

# usage 
f = "%Y-%m-%d %H:%M:%S+01:00"
t1 = datetime.strptime("2018-03-07 22:56:57+01:00", f)
t2 = datetime.strptime("2018-03-07 22:48:05+01:00", f)
elapsed_time = check_time_difference(t1, t2)

print(elapsed_time)
#return : 0:08:52

这里有一个很容易概括或转化为函数的答案,它合理紧凑,易于遵循。

ts_start=datetime(2020, 12, 1, 3, 9, 45)
ts_end=datetime.now()
ts_diff=ts_end-ts_start
secs=ts_diff.total_seconds()
days,secs=divmod(secs,secs_per_day:=60*60*24)
hrs,secs=divmod(secs,secs_per_hr:=60*60)
mins,secs=divmod(secs,secs_per_min:=60)
secs=round(secs, 2)
answer='Duration={} days, {} hrs, {} mins and {} secs'.format(int(days),int(hrs),int(mins),secs)
print(answer)

它给出的答案是“持续时间=270天10小时32分42.13秒”

你可能会发现这个快速的片段在不那么长的时间间隔里很有用:

    from datetime import datetime as dttm
    time_ago = dttm(2017, 3, 1, 1, 1, 1, 1348)
    delta = dttm.now() - time_ago
    days = delta.days # can be converted into years which complicates a bit…
    hours, minutes, seconds = map(int, delta.__format__('').split('.')[0].split(' ')[-1].split(':'))

在Python v.3.8.6上测试

这将给出以秒为单位的差值(然后除以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左右)。