Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较两个datetime对象,查看它们之间的间隔是否最多为2分钟_Python_Datetime - Fatal编程技术网

Python 比较两个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

我有一个DateTime对象列表,我想比较它们中的任何两个是否有相同的小时和分钟,或者最多相隔2分钟。我使用
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