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

