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

SimpleDateFormat小时格式化异常求助:时间戳转时长格式出错

问题根源分析

你遇到的问题核心是**SimpleDateFormat是用来表示一天内的时刻,而非累计时长**。其中HH格式符的取值范围是00-23,当你的总时长超过24小时时,它会自动对24取模——比如53小时会被处理成53%24=5小时,这就是错误的原因。

解决方案

下面提供两种可靠的实现方式,根据你的Java版本选择:

方式一:Java 8+ 推荐使用 Duration 类(更简洁安全)

Java 8引入的java.time.Duration类专门用于处理时间间隔,完美适配累计时长的计算:

long totalTime = 193500000L; // 你的毫秒级时间戳
Duration duration = Duration.ofMillis(totalTime);
long hours = duration.toHours(); // 获取累计总小时数,不会取模
long minutes = duration.toMinutes() % 60; // 获取剩余分钟数
String formatted = String.format("%02dhours:%02dminutes", hours, minutes);
// 输出结果:53hours:45minutes

方式二:手动计算(兼容所有Java版本)

如果你的项目还在使用Java 7或更早版本,可以直接通过数学运算计算累计时长:

long totalTime = 193500000L;
long totalMinutes = totalTime / (1000 * 60); // 把毫秒转换为总分钟数
long hours = totalMinutes / 60; // 累计小时数
long minutes = totalMinutes % 60; // 剩余分钟数
String formatted = String.format("%02dhours:%02dminutes", hours, minutes);
// 输出结果:53hours:45minutes
验证测试

用你给出的测试用例验证,结果全部符合预期:

  • 193500000 → 53hours:45minutes(正确)
  • 108000000 → 30hours:00minutes(正确)
  • 117000000 → 32hours:30minutes(正确)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:53