我有几个不同的日期和时间,在列表中用作少数DateTime对象。
from datetime import datetime
arr = [datetime(2023, 9, 1, hour=4, minute=3),
datetime(2023, 9, 1, hour=2, minute=15),
datetime(2023, 9, 1, hour=6, minute=45),
# trimmed for brevity
]
如果我想看看两个dateTime对象是否彼此24-hours属于不难做到。除了,我试图查看是否给定的DateTime对象列表,其中至少可以包含在24-hour时间跨度内。
对于此的real-world用例,这些时间戳可能代表用户帐户上的sign-ins,如果用户试图在15分钟内登录过于n次,我可能会选择根据该*采取一些措施。
如何在Python中完成?
*不用担心,我实际上并不是要进行DIY身份验证 - 这纯粹是一个例子。
分析解答
如果我正确理解您,则可以对数组进行排序,然后使用某些尺寸的移动窗口。然后检查此窗口的第一个和最后一个元素是否落到所需范围:
from datetime import datetime
def check_arr(arr, seconds=60 * 60 * 24, window=3):
if len(arr) < window:
return False
for i in range(len(arr) - window + 1):
first, *_, last = arr[i : i + window]
s = (last - first).total_seconds()
if s <= seconds:
return True
return False
arr = [
datetime(2023, 9, 1, hour=4, minute=3),
datetime(2023, 9, 1, hour=2, minute=15),
datetime(2023, 9, 1, hour=6, minute=45),
# trimmed for brevity
]
print(check_arr(sorted(arr)))
printing:
True