將毫秒轉換為「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中文網其他相關文章!