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

Python如何计算带星期标识的两个时分字符串的秒级时间差

问题描述

现有两个仅包含星期、小时、分钟信息的时间字符串:

time_1 = "Wed 09:00"
time_2 = "Fri 13:00"

需求为计算两个时间的差值,结果以秒为单位,不需要解析完整年月日信息,仅处理星期、小时、分钟维度。

直接使用datetime.datetime.strptime按"%a %H:%M"格式解析时,由于未传入年月日参数,方法会为两个时间填充相同的默认日期,执行差值计算时仅统计小时、分钟的差异,无法纳入星期间隔,无法得到正确结果,示例错误代码如下:

from datetime import datetime
time_1 = datetime.strptime(time_1, "%a %H:%M")
time_2 = datetime.strptime(time_2, "%a %H:%M")
time_diff = (time_2 - time_1).total_seconds() # 结果仅包含时分差,缺失星期差
实现方案

strptime按%a解析后,星期信息会存储在datetime对象的weekday()返回值中,规则为周一返回0、周二返回1……周日返回6。我们只需要单独计算星期维度的间隔,叠加时分维度的差值即可得到正确结果,默认按「晚的时间不早于早的时间,跨周自动补7天」的逻辑计算(例如周日23:00到周一01:00的差值为2小时,而非6天2小时)。

完整实现代码:

from datetime import datetime

def get_time_diff_seconds(time_str1: str, time_str2: str, parse_format: str = "%a %H:%M") -> int:
    t1 = datetime.strptime(time_str1, parse_format)
    t2 = datetime.strptime(time_str2, parse_format)

    # 计算星期差,跨周时补7天
    weekday_gap = t2.weekday() - t1.weekday()
    if weekday_gap < 0:
        weekday_gap += 7

    # 分别计算星期部分、时分部分的秒数差后求和
    weekday_sec = weekday_gap * 24 * 3600
    hms_sec = (t2.hour * 3600 + t2.minute * 60) - (t1.hour * 3600 + t1.minute * 60)
    return weekday_sec + hms_sec

# 测试用例
time_1 = "Wed 09:00"
time_2 = "Fri 13:00"
print(get_time_diff_seconds(time_1, time_2))
# 输出结果 187200,对应2天4小时,计算逻辑:2*86400 + 4*3600 = 187200
注意事项
  • 该实现不需要补全年月日字段,完全基于传入的星期、时分信息计算,适配无完整日期的使用场景
  • 不要依赖strptime默认填充的年月日做差值计算,不同Python版本的默认填充规则可能存在差异,直接提取字段计算稳定性更高
  • 如果业务逻辑需要固定按同周不跨周计算(例如周一到周日的差值为6天,周日到周一的差值为-6天),删除代码中weekday_gap <0时加7的逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:13:00