将毫秒转换为“hh:mm:ss”格式
您可能会遇到需要将毫秒转换为熟悉的“ hh:mm:ss”格式,通常用于表示时间。这可能是应用程序中的常见要求,例如倒计时器。
理解问题
您可能已尝试使用以下代码来执行转换:
<code class="java">//hh:mm:ss String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));</code>
但是,此代码可能无法按预期工作。例如,对于 3600000 毫秒(代表 1 小时)的输入,您会得到“01:59:00”,而不是正确的“01:00:00”。
识别问题
经过仔细检查,问题出在这一行:
<code class="java">TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis))</code>
这里,您使用分钟而不是小时将小时转换为毫秒。
更正逻辑
正确的代码应该使用 TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) 代替:
<code class="java">//hh:mm:ss String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));</code>
此更改确保时间转换为正确完成后,您将在 3600000 毫秒内获得所需的“01:00:00”结果。
简化版本
您可以通过使用进一步简化代码模除法而不是减法:
<code class="java">String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) % TimeUnit.HOURS.toMinutes(1), TimeUnit.MILLISECONDS.toSeconds(millis) % TimeUnit.MINUTES.toSeconds(1));</code>
此版本在提供相同准确结果的同时保持高效。
以上是如何将毫秒转换为“hh:mm:ss”格式?的详细内容。更多信息请关注PHP中文网其他相关文章!