使用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,提问作者Ксения Манжула
相关产品推荐
相关产品推荐

