1. ホーム
  2. java

[解決済み] javaで継続時間をフォーマットする方法は?(例:H:MM:SSのフォーマット)

2022-04-20 10:28:06

質問

H:MM:SSのようなパターンで秒単位の継続時間をフォーマットしたいのですが、どうすればいいですか?現在のjavaのユーティリティは、時間をフォーマットするように設計されていますが、継続時間をフォーマットすることはできません。

どのように解決するのですか?

8より前のバージョンのJavaを使用している場合.............................あなたは Jodaタイム PeriodFormatter . もし本当にデュレーション (カレンダーシステムを参照しない経過時間) があるのなら、おそらく Duration を呼び出すことができます。 toPeriod (どんな PeriodType 25時間が1日と1時間になるのか、ならないのか、などを反映させることができます。 Period をフォーマットすることができます。

Java 8以降を使用している場合。通常、私は java.time.Duration を使用して持続時間を表します。そして getSeconds() などで整数を取得し、bobince の回答に従って標準的な文字列フォーマットを行うことができます。 シングル 負の符号を出力文字列の中に入れてください。つまり、次のようなものです。

public static String formatDuration(Duration duration) {
    long seconds = duration.getSeconds();
    long absSeconds = Math.abs(seconds);
    String positive = String.format(
        "%d:%02d:%02d",
        absSeconds / 3600,
        (absSeconds % 3600) / 60,
        absSeconds % 60);
    return seconds < 0 ? "-" + positive : positive;
}

このようにフォーマットすることは それなりに は、煩わしいほど手作業が多いのですが、簡単です。以下の通りです。 パース 一般的にはもっと難しい問題になってきますが...。もちろん、その気になればJava 8でもJoda Timeを使うことは可能です。