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

SimpleDateFormat显示异常:短时长自动填充5:30问题求助

解决媒体播放时长格式化时的错误显示问题

我来帮你搞定这个问题!你遇到的核心问题是用错了工具:SimpleDateFormat是用来格式化具体日期时间的(比如2024-05-20 14:30:00这种),而不是用来处理**播放时长(时间间隔)**的。

当你把currentPosition(毫秒数)传给Date构造函数时,它会把这个数值当成「从1970年1月1日00:00:00 GMT开始的时间戳」,然后根据你的本地时区解析成日期时间——你看到的5:30其实是你的时区和GMT的偏移值,完全不是你要的播放时长。

解决方案1:手动计算时长(兼容所有Java版本)

直接把毫秒数转换成分钟和秒,然后用String.format确保两位数显示:

// 处理当前播放位置
int currentTotalSeconds = mediaPlayer.getCurrentPosition() / 1000;
int currentMinutes = currentTotalSeconds / 60;
int currentSeconds = currentTotalSeconds % 60;
leftTime.setText(String.format("%02d:%02d", currentMinutes, currentSeconds));

// 处理剩余时长
int remainingTotalSeconds = (mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition()) / 1000;
int remainingMinutes = remainingTotalSeconds / 60;
int remainingSeconds = remainingTotalSeconds % 60;
rightTime.setText(String.format("%02d:%02d", remainingMinutes, remainingSeconds));

这里的%02d会自动给不足两位的数字补0,比如5秒会显示成00:05,45秒显示成00:45,完全符合你的需求。

解决方案2:用Java 8+的Duration类(更优雅)

如果你的项目用的是Java 8或更高版本,推荐用Duration类专门处理时间间隔,代码更清晰:

// 当前播放时长
Duration currentDuration = Duration.ofMillis(mediaPlayer.getCurrentPosition());
long currentMin = currentDuration.toMinutes();
long currentSec = currentDuration.minusMinutes(currentMin).getSeconds();
leftTime.setText(String.format("%02d:%02d", currentMin, currentSec));

// 剩余时长
Duration remainingDuration = Duration.ofMillis(mediaPlayer.getDuration() - mediaPlayer.getCurrentPosition());
long remainingMin = remainingDuration.toMinutes();
long remainingSec = remainingDuration.minusMinutes(remainingMin).getSeconds();
rightTime.setText(String.format("%02d:%02d", remainingMin, remainingSec));

Duration是Java官方为时间间隔设计的类,完全不会有日期时区的干扰,代码可读性更强。

总结

别再用SimpleDateFormat处理播放时长啦,它的设计目标和你的需求完全不匹配。上面两种方法都能完美解决你遇到的「分钟位显示30、小时位显示5」的问题,确保时长不足1分钟时显示00:xx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:07