ミリ秒を "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:00:00」ではなく「01:59: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 中国語 Web サイトの他の関連記事を参照してください。