Python 比较两个datetime对象,查看它们之间的间隔是否最多为2分钟
我有一个DateTime对象列表,我想比较它们中的任何两个是否有相同的小时和分钟,或者最多相隔2分钟。我使用Python 比较两个datetime对象,查看它们之间的间隔是否最多为2分钟,python,datetime,Python,Datetime,我有一个DateTime对象列表,我想比较它们中的任何两个是否有相同的小时和分钟,或者最多相隔2分钟。我使用itertools.compositions(数据,2)对它们进行比较。但我被困在比较部分。我不知道如何比较2分钟或更长时间,因为如果一个时间戳是11:58,那么两分钟更多的时间将是12:00,这意味着我可以将2添加到11:58,因为它将转到11:60而不是12:00 我将dateTime对象转换为字符串 dt1 = int((acqList[a].timestamp).time().st
itertools.compositions(数据,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
不要传递到字符串,数值更容易比较
从两个datetime
对象中,您可以使用此方法对它们进行比较
d1 = datetime.now()
d2 = datetime.now() - timedelta(minutes=2)
if fabs((d1 - d2).total_seconds()) <= 120:
print("diff lower than 2m")
d1=datetime.now()
d2=datetime.now()-timedelta(分钟=2)
如果使用datetime对象计算fabs((d1-d2).total_seconds()),则可以直接从移位列中减去值来计算差值:
>>>df = pd.DataFrame(index = range(7), columns = ['date'],
>>>data=['2012-03-16 23:50:00',
'2012-03-16 23:56:00',
'2012-03-17 00:08:00',
'2012-03-17 00:10:00',
'2012-03-17 00:12:00',
'2012-03-17 00:20:00',
'2012-03-20 00:43:00'])
>>>df.date = pd.to_datetime(df['date'])
>>>df['delta'] = (df['date']-df['date'].shift()).fillna(pd.Timedelta(seconds=0))
date delta
0 2012-03-16 23:50:00 0 days 00:00:00
1 2012-03-16 23:56:00 0 days 00:06:00
2 2012-03-17 00:08:00 0 days 00:12:00
3 2012-03-17 00:10:00 0 days 00:02:00
4 2012-03-17 00:12:00 0 days 00:02:00
5 2012-03-17 00:20:00 0 days 00:08:00
6 2012-03-20 00:43:00 3 days 00:23:00
明白了。那么我还需要将datetime对象转换为string或int吗?@xd3262nd不转换为任何一个,您希望每个值都在2分钟的间隔内吗?是的。我想检查它们是否在2分钟间隔内。我想我现在明白了。非常感谢你的帮助!现在学习新东西你介意给我解释一下这个代码吗<代码>如果所有([fabs((d1-d2).total_seconds())@xd3262如果对于所有值的组合,2之间的差值小于2min,则您将打印。在前一行中,我创建了一个从现在到现在之前2min的日期时间列表,因此所有值都在相同的2-3min间隔内,并且条件将为真。这是否回答了您的问题?
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")
>>>df = pd.DataFrame(index = range(7), columns = ['date'],
>>>data=['2012-03-16 23:50:00',
'2012-03-16 23:56:00',
'2012-03-17 00:08:00',
'2012-03-17 00:10:00',
'2012-03-17 00:12:00',
'2012-03-17 00:20:00',
'2012-03-20 00:43:00'])
>>>df.date = pd.to_datetime(df['date'])
>>>df['delta'] = (df['date']-df['date'].shift()).fillna(pd.Timedelta(seconds=0))
date delta
0 2012-03-16 23:50:00 0 days 00:00:00
1 2012-03-16 23:56:00 0 days 00:06:00
2 2012-03-17 00:08:00 0 days 00:12:00
3 2012-03-17 00:10:00 0 days 00:02:00
4 2012-03-17 00:12:00 0 days 00:02:00
5 2012-03-17 00:20:00 0 days 00:08:00
6 2012-03-20 00:43:00 3 days 00:23:00