我想以这种格式“HH:mm:ss”转换秒/毫秒(对于样本,从 5 秒到 00:00:05)。我试图以这种方式获取该格式:
int millis = 5000;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(millis);
这样,我得到“01:00:05”而不是“00:00:05”。我哪里错了?
原文由 Webman 发布,翻译遵循 CC BY-SA 4.0 许可协议
时区。
长值
5000
表示纪元后 5 秒。对于大多数时区,纪元后 5 秒不是当地时间午夜后 5 秒。Java 8 更新:
java.time.LocalTime
将处理挂钟“一天中的时间”的想法,而您不必担心java.util.Date
中隐含的时区和日期。如果您可以使用 Java 8,并且您的持续时间总是少于一天,那么您的示例的正确版本可以很简单:(我想严格来说,
java.time.Duration
是你想要的更好的 _模型_,因为它代表一定的秒数,而不是一天中的时间。但是格式化成 hh 很痛苦: mm:ss,所以如果您总是处理 24 小时以内的值,TimeOfDay 会免费为您提供这种格式,并且在其他方面是等效的。)如果您坚持使用 Java 7 或更低版本,那么在您的示例代码中明确指定
GMT
的时区应该会给您预期的输出。这是在我的机器上演示问题和 Java 7 解决方案的 Scala REPL 会话:
所以你可以看到我的默认时区是
GB
,在5000L
表示的时间与格林威治标准时间有 1 小时的偏差。将时区设置为 GMT 会产生00:00:05
的预期输出。