python - 计算两次之间的差值

python - get difference between two times

我今天有一个简单的问题。我想知道这两个日期之间的差异,并检查差异是否在 ~5 分钟左右。

我发现求差有问题,要检查一下。

我将同一个日期与相差几分钟的日期进行比较,它打印出 -1 天的差异?这对我来说没有意义。

如果需要,请自行测试。

比较日期:

Date1: 2021-05-15 00:38:57.244000
Date2: 2021-05-15 02:40:42.245693

打印出来的差异是:

Diff: -1 day, 21:58:14.998307

那么为什么是 -1 天?差异不应该只是 ~2 小时吗?获得两个日期之间差异的最佳方法是什么? 正如我所说,我想检查差异是否小于(或等于)5 分钟。如果日期每次都不同,那怎么可能呢?

重要信息:日期总是不同,因为我检查了帐户创建日期。

我用这段代码来产生差异:

diff = date1 - date2

您可以在减法运算之前进行比较运算。示例如下。

from datetime import datetime

dt1 = datetime(2020, 4, 19, 12, 20)
dt2 = datetime(2020, 4, 21, 15, 2)

def get_date_diff(date1, date2):
    diff = date2 - date1 if date1 < date2 else date1 - date2
    return diff

def test():
    print (get_date_diff(dt1, dt2))

test()

这个问题可以通过对两个日期对象进行排序来解决,这样差异比较总是 returns 一个正数。然后你可以使用 timedelta 对象来检查差异是否小于 5 分钟。

from datetime import datetime, timedelta

# Define dates as datetime objects
Date1 = datetime.fromisoformat("2021-05-15 00:38:57.244000")
Date2 = datetime.fromisoformat("2021-05-15 02:40:42.245693")

# Define 5 minutes as a timedelta object
five_minute_duration = timedelta(minutes=5)

通过用较新的日期减去较旧的日期来比较两个日期。结果将是一个 timedelta 对象。

diff = Date2 - Date1

如果您不确定哪个日期对象是旧的和新的,您可以对它们进行排序。这将使比较稳定并防止意外的负时间增量。

dates_sorted = sorted([Date2, Date1])
diff = dates_sorted[1] - dates_sorted[0]

小时差异。在此示例中,持续时间为 2.029... 小时。

diff.total_seconds() / (60 * 60)

检查差异是否小于或等于 5 分钟持续时间。

if diff <= five_minute_duration:
    print("Yes")
else:
    print("No")

通过为允许的差异创建两个具有正值和负值的时间增量来创建上限和下限

lower = timedelta(minutes=-5)
upper = timedelta(minutes=5)

然后检查日期时间之间的差异是否在这些范围内

lower < date1 - date2 < upper

这种方法的优点是,如果多次进行这种比较,lowerupper 可以只创建一次,而不必对日期时间进行排序