You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python通过Timestamp检查3分钟内的字典数据活动

基于时间戳检查活动状态并触发告警

活动数据

[
    {'Activity': 'password changed', 'Time': '08/17/2022 08:37:15', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:36:30', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:35:11', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:34:20', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:33:20', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '07/17/2022 10:37:15', 'UserName': 'client'}
]

需求

根据每条数据的Time字段判断活动状态:

  • 若活动时间距离当前时间3分钟以内,判定为正常
  • 若超过3分钟,输出告警信息

尝试的代码

from datetime import datetime, timedelta
now = datetime.now()-timedelta(minutes=3)
current_time = now.strftime('%m/%d/%Y %H:%M:%S')
print(current_time)
for o in op:
    temp = o['Time']
    if current_time < temp:
        print("fine")
    else:
        print("alert")

问题分析

当前代码的核心问题是直接比较字符串格式的时间,字符串比较是按字符顺序逐位对比,并非真正的时间逻辑对比,会导致判断结果错误。正确做法是把字符串时间转换成datetime对象后再进行时间差的比较。

正确实现代码

from datetime import datetime, timedelta

# 活动数据列表
op = [
    {'Activity': 'password changed', 'Time': '08/17/2022 08:37:15', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:36:30', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:35:11', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:34:20', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '08/17/2022 08:33:20', 'UserName': 'client'},
    {'Activity': 'password changed', 'Time': '07/17/2022 10:37:15', 'UserName': 'client'}
]

# 获取当前时间往前推3分钟的时间点(datetime对象)
three_minutes_ago = datetime.now() - timedelta(minutes=3)
# 匹配数据中Time字段的格式
time_format = '%m/%d/%Y %H:%M:%S'

for item in op:
    # 将字符串时间转换为datetime对象
    activity_time = datetime.strptime(item['Time'], time_format)
    # 时间逻辑对比:活动时间晚于3分钟前的时间则正常,否则告警
    if activity_time > three_minutes_ago:
        print(f"用户 {item['UserName']} 的活动【{item['Activity']}】状态正常")
    else:
        print(f"告警:用户 {item['UserName']} 的活动【{item['Activity']}】时间超过3分钟")

说明

  1. 使用datetime.strptime()将字符串格式时间转为datetime对象,确保时间对比符合逻辑
  2. 直接用datetime对象做大小比较,避免字符串对比的逻辑错误
  3. 输出信息增加用户和活动类型,提升可读性

内容的提问来源于stack exchange,提问作者warezers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:06:18