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

使用time.localtime()时时间显示错误的问题求助

问题描述

开发MP3播放器时,使用time.localtime()处理播放时长出现错误——歌曲仅4分钟长,但时间显示莫名多出2小时,分钟和秒的计算却是正确的。相关代码如下:

播放时间处理代码:

import time

current_time = time.strftime('%H:%M:%S', time.localtime(self.player.position() / 1000))
print(time.localtime(self.player.position() / 1000))
song_duration = time.strftime('%H:%M:%S', time.localtime(self.player.duration() / 1000))
print(time.localtime(self.player.duration() / 1000))
self.ui.start_lbl.setText(f"{current_time}")
self.ui.end_lbl.setText(f"{song_duration}")

播放器初始化代码:

self.player = QMediaPlayer()
self.audio_output = QAudioOutput()
self.player.setAudioOutput(self.audio_output)

已确认time.localtime()返回的tm_hour值为2,播放器本身可正常播放,仅时间显示存在异常。

解决方案

问题核心是time.localtime()的设计用途:它是用来将Unix时间戳(从1970年1月1日UTC零点开始累计的秒数)转换为当地时间,而你传入的是歌曲的播放时长秒数(比如4分钟对应240秒),这个数值会被当作Unix时间戳处理,再加上你所在时区的偏移(比如UTC+2时区),就会凭空多出2小时。

正确的做法是直接根据秒数计算时分秒,完全不需要借助time.localtime():

def format_duration(seconds):
    seconds = int(seconds)
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    # 根据时长自动选择格式:有小时则显示HH:MM:SS,否则显示MM:SS
    if hours > 0:
        return f"{hours:02d}:{minutes:02d}:{seconds:02d}"
    else:
        return f"{minutes:02d}:{seconds:02d}"

# 替换原代码中的时间格式化逻辑
current_time = format_duration(self.player.position() / 1000)
song_duration = format_duration(self.player.duration() / 1000)
self.ui.start_lbl.setText(current_time)
self.ui.end_lbl.setText(song_duration)

这样就能准确对应歌曲的实际播放时长,不会再出现时区偏移导致的错误小时数。

内容的提问来源于stack exchange,提问作者Ксения Манжула

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:57:37