1. ホーム

[解決済み】ミリ秒を "hh:mm:ss "形式に変換するには?

2022-04-08 02:15:06

質問

困っています。偶然見つけた これ というスレッドで、カウントダウンタイマーをどのようにフォーマットするか考えてみました。 hh:mm:ss .

以下は私の試みです。

//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)));   

そこで、次のような値を試してみると 3600000ms となります。 01:59:00 であるべきなので、これは誤りです。 01:00:00 . 明らかに私のロジックに何か問題があるのですが、今のところ、それが何なのかがわかりません

どなたか助けてください。

編集

修正しました。以下は、ミリ秒の正しい書式を hh:mm:ss フォーマット

//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))));

問題はこれでした TimeUnit.MINUTES.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) . 本来はこうであるべきだ。 TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)) の代わりに

解決方法は?

あなたは 本当に 近い。

String.format("%02d:%02d:%02d", 
TimeUnit.MILLISECONDS.toHours(millis),
TimeUnit.MILLISECONDS.toMinutes(millis) -  
TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)), // The change is in this line
TimeUnit.MILLISECONDS.toSeconds(millis) - 
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));   

を使用して時間をミリ秒に変換していました。 の代わりに 時間 .

ちなみに、私はあなたの TimeUnit API :)

以下はテストコードです。

public static void main(String[] args) throws ParseException {
    long millis = 3600000;
    String hms = 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)));
    System.out.println(hms);
}

出力します。

01:00:00


私は、上記の私のコードは、引き算の代わりにモジュラス除算を使用することによって、大幅に簡素化できることに気づきました。

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));

まだ TimeUnit すべてのマジックバリューにAPIを使用し、まったく同じ出力を与えています。