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

跨工作日(周五至非周一)的消息时间差计算逻辑异常排查求助

跨工作日(周五至非周一)的消息时间差计算逻辑异常排查求助

大家好,我最近在实现一个基于消息交互数奇偶性配对、计算时间差的功能时遇到了逻辑漏洞,想请各位帮忙分析一下问题所在。

我的需求是:配对奇数交互数(用户消息)和后续的偶数交互数(客服回复),根据不同的时间场景计算两者的时间差。其中一个场景是周五发送的用户消息,后续回复不是在周一,这种情况应该走我的Block3逻辑处理,但目前有一个测试案例没有触发该逻辑,导致time_difference返回NaN,而另一个类似场景却正常工作。

我的代码逻辑

for index, row in df.iterrows():
    if row["interaction_count"] % 2 == 0:
        if previous_odd_timestamp:
            even_time = row["timestamp"]
            odd_time = previous_odd_timestamp
            print(odd_time, row['interaction_count'])

            if odd_time.hour >= 8 and odd_time.hour < 19 and odd_time.weekday() < 5 and odd_time.weekday() == even_time.weekday():
                print("phase 1: line", row['interaction_count'])
                time_diff = (even_time - odd_time).total_seconds()/60
                time_diff_list.append(time_diff)
                df.at[index, 'time_difference'] = time_diff

            elif odd_time.hour <= 8 and odd_time.weekday() <= 4 and odd_time.weekday() == even_time.weekday():
                print('phase 2: line', row['interaction_count'])
                odd_time = odd_time.replace(hour=8, minute=0, second=0, microsecond=0)
                time_diff = (even_time - odd_time).total_seconds()/60
                time_diff_list.append(time_diff)
                df.at[index, 'time_difference'] = time_diff

            if 8 < odd_time.hour < 19 and odd_time.weekday() >= 4 and odd_time.weekday() != even_time.weekday():
                print('phase 3: line ',row['interaction_count'])
                odd_difference_seven_pm = odd_time
                odd_difference_seven_pm = odd_time.replace(hour=19, minute=0, second=0, microsecond=0)
                odd_difference_seven_pm= odd_difference_seven_pm - odd_time

                if odd_time.weekday() == 4:  # Saturday 这里注释错误,weekday=4实际是周五
                    odd_time = odd_time + timedelta(days=3)
                    odd_time = odd_time.replace(hour=8, minute=0, second=0, microsecond=0)
                elif odd_time.weekday() == 5:  # Saturday
                    odd_time = odd_time + timedelta(days=2)
                    odd_time = odd_time.replace(hour=8, minute=0, second=0, microsecond=0)
                elif odd_time.weekday() == 6:  # Sunday
                    odd_time = odd_time + timedelta(days=1)
                    odd_time = odd_time.replace(hour=8, minute=0, second=0, microsecond=0)

                time_diff = (even_time - odd_time).total_seconds()/60
                time_diff_list.append(time_diff)
                df.at[index, 'time_difference'] = time_diff + odd_difference_seven_pm.total_seconds()/60
            previous_odd_timestamp = None
    elif row["interaction_count"] % 2 != 0:
        previous_odd_timestamp = row["timestamp"]

测试案例对比

正常工作的案例(周五18:31的消息,周一08:32回复)

[
  {
    "timestamp": "2023-05-05 18:31:51.302",
    "interaction_count": 11,
    "time_difference": "NaN"
  },
  {
    "timestamp": "2023-05-08 08:32:40.076",
    "interaction_count": 12,
    "time_difference": 60.812900
  }
]

这个案例正常触发了Block3,计算出的时间差是:周五19:00-18:31的29分钟 + 周一08:32-08:00的32分钟,合计约60.8分钟,符合预期。

异常的案例(周五08:37的消息,周二15:37回复)

[
  {
    "timestamp": "2023-05-05 08:37:43.902",
    "interaction_count": 23,
    "time_difference": "NaN"
  },
  {
    "timestamp": "2023-05-09 15:37:21.645",
    "interaction_count": 24,
    "time_difference": "NaN"
  }
]

这个案例中,用户消息是周五08:37(属于工作时间),回复是周二15:37,两者工作日不同,理论上应该触发Block3,但实际没有,导致time_difference为NaN。

我自己的初步分析

我检查了条件,发现第二个案例中odd_time.hour是8,而Block3的触发条件是8 < odd_time.hour < 19——这里的8 <把hour等于8的情况排除了!所以周五08:37的消息不满足这个条件,自然不会进入Block3处理。而第一个案例的odd_time.hour是18,满足8 < 18 <19,所以正常触发。

另外我还发现代码里有个注释错误:if odd_time.weekday() == 4: # Saturday,实际上Python的datetime.weekday()中,4代表周五,5才是周六,这个注释可能会导致后续维护混淆。

寻求帮助的点

除了我发现的hour条件问题,想请各位帮忙确认:

  1. 调整Block3的hour条件为odd_time.hour >=8 and odd_time.hour <19是否能解决这个问题?
  2. 我的Block3中关于工作日的时间偏移逻辑是否正确?比如周五的消息,要跳到下周一的08:00,加3天是否正确?
  3. 是否还有其他潜在的逻辑漏洞需要注意?

备注:内容来源于stack exchange,提问作者Gustavo Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 07:48:00