首页 > 解决方案 > 比较两个日期时间对象,看看它们是否相隔最多 2 分钟

问题描述

我有一个 DateTime 对象的列表,我想比较它们中的任何两个是否具有相同的小时和分钟或最多相隔 2 分钟。我使用itertools.combinations( data, 2 ). 但我被困在比较部分。我不确定如何比较 2 分钟或更长时间,因为如果一个时间戳是 11:58,那么两分钟将是 12:00,这意味着我可以将 2 添加到 11:58,因为它将变为 11:60 而不是 12: 00.

我用这个将 dateTime 对象转换为字符串

dt1 = int((acqList[a].timestamp).time().strftime('%H%M'))
dt2 = int((acqList[b].timestamp).time().strftime('%H%M'))

然后,我做了这个

if dt1 == dt2 or dt1+1 == dt2 or dt2+1 == dt1 or dt1-1 == dt2 or dt2-1 == dt1:

但这会引起1160的关注,不包括最多2分钟的差异

dateTime 对象列表的示例:

2019-10-01 15:37:11+00:00
2019-10-01 15:37:09+00:00
2019-10-01 16:09:06+00:00
2019-10-01 15:24:55+00:00
2019-10-01 16:36:56+00:00
2019-10-01 10:08:39+00:00

标签: pythondatetime

解决方案


不要传递给字符串,数值更容易比较。

您可以从两个datetime对象中比较它们,以每种方式使用此方法

d1 = datetime.now()
d2 = datetime.now() - timedelta(minutes=2)

if fabs((d1 - d2).total_seconds()) <= 120:
    print("diff lower than 2m")

以下内容适合但仅以一种方式:

if (d1 - d2) <= timedelta(minutes=2):
    print("diff lower than 2m")

要查找日期时间列表是否在 2 分钟间隔内,请检查每个组合是否低于 2 分钟

values = [datetime.now() - timedelta(minutes=randint(0, 2)) for i in range(20)]
combi = combinations(values, 2)
if all([fabs((d1 - d2).total_seconds()) <= 120 for d1, d2 in combi]):
    print("All values fit in a 2-min interval")

推荐阅读