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

Python Discord.py开发 如何将time.time()计算的时长转%H:%M:%S格式

Python Discord语音活跃度追踪机器人时长格式转换方案

该需求完全可实现,具体修改方案如下:

1 修正计算逻辑去除毫秒

你现有代码中join_time已经做了取整处理,仅需对离开时间也做取整,即可保证计算出的时长无小数毫秒:

if before.channel is None: # 补充:Python中判断None推荐用is而非==,语法更规范
    join_time = round(time.time())
    userdata["join_time"] = join_time
elif after.channel is None:
    if userdata["join_time"] is None: 
        return 
    userdata = voice_data[guild_id][new_user]
    leave_time = round(time.time()) # 新增对离开时间的取整,消除毫秒
    passed_time = leave_time - userdata["join_time"]
    userdata["total_time"] += passed_time # 此时total_time为整数秒,无小数
    userdata["join_time"] = None

如果你不想修改原有计算逻辑,也可以在后续格式转换时直接对total_time取整即可,无需改动现有计算代码。

2 秒数转%H:%M:%S格式

提供两种常用转换方案,按需选择即可:

方案1:用datetime内置方法实现(支持自动显示天数)

适合需要标识超过24小时时长的场景:

import datetime

def sec_to_hms(sec):
    return str(datetime.timedelta(seconds=int(sec)))

# 调用示例:7秒转换后为 0:00:07,3661秒转换后为 1:01:01,90061秒转换后为 1 day, 1:01:01
hms_time = sec_to_hms(userdata["total_time"])

方案2:手动计算实现(仅显示时分秒,小时数可超过24)

适合不需要显示天数,仅保留纯时分秒格式的场景:

def sec_to_hms(sec):
    sec = int(sec)
    hours = sec // 3600
    minutes = (sec % 3600) // 60
    seconds = sec % 60
    return f"{hours:02d}:{minutes:02d}:{seconds:02d}"

# 调用示例:7秒转换后为 00:00:07,90061秒转换后为 25:01:01
hms_time = sec_to_hms(userdata["total_time"])

转换完成后你可以直接将hms_time作为输出字段,或者替换原有total_time的存储值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:06:03