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
相关产品推荐
相关产品推荐

