Androidアプリ開発にJava/Kotlinを使ってた時。
ミリ秒をこんな風にフォーマットしたかったです。
▼ 変換前のミリ秒
1 |
123456789 millis |
▼ これをHH:MM:SS.LLにフォーマット
1 |
34:17:36.79 |
タイマー表示みたいな感じにしたかったです。
その方法は1つだけではないので、
Java/kotlinでミリ秒⇒hhmmssの変換方法を紹介。
最後の方法がもっとも使い勝手がいいです。
このページの目次
方法1.地道に除算してhhmmss形式にフォーマット
ミリ秒をひたすら除算していく方法です。
流れ : 時間 ⇒ 分 ⇒ 秒 ⇒ 残りミリ秒
除算をしていくという地道さがあります。
▼ Kotlin : フォーマット変換コード例
1 2 3 4 5 6 7 8 |
fun convertMillis(millis: Long): String? { val l = millis % 1000 val s = millis / 1000 % 60 val m = millis / 1000 / 60 % 60 var h = millis / 1000 / (60 * 60) % 24 h += millis / 1000 / (60 * 60 * 24) * 24 return String.format("%d:%02d:%02d.%02d", h, m, s, l) } |
▼ Java : 上記コードをJavaで書き直したコード例
1 2 3 4 5 6 7 8 |
String convertMillis(long millis) { long l = millis % 1000; long s = (millis/1000) % 60; long m = (millis/1000/60) % 60; long h = (millis/1000/(60*60)) % 24; h += (millis/1000/(60*60*24))*24; return String.format("%d:%02d:%02d.%02d", h,m,s,l); } |
ここではミリ秒精度まで必要なので、ミリ秒・秒・分・時間の余りをそれぞれ求めてます。ただしそれだと割り切れた日数が除外されるので、最後に 日数*24 を時間に足してます。
少し面倒だけど内部処理は分かりやすいはずです。
あと必要に応じてアレンジしやすいと思う
方法2.apache commons DurationFormatUtilsで変換
お次はapache commonsのUtilsクラスを使う方法です。
その名も DurationFormatUtils というクラス
▼ Apache commonsの導入は次記事とか参照
▼ build.gradleにライブラリ追加
1 |
implementation 'org.apache.commons:commons-lang3:3.6' |
▼ たった1行でミリ秒をフォーマットできる
1 2 |
long millis = 123456789 DurationFormatUtils.formatDuration(millis, "HH:mm:ss.SSS"); |
こういうのも便利だなと思います。
僕はあまり使わないけど
方法3.String.format()からミリ秒をフォーマット
この方法が一番ベストだと考えてます。
実はString.format()を使えば簡単です。
▼ Java : こんな数行のコードで変換可能
1 2 3 4 5 |
long millis = 123456789; System.out.println("hhmmss.ll : "+ /// ミリ秒をHH:MM:.LLにフォーマット String.format("%1$tH:%1$tM:%1$tS.%1$tL", millis) ); |
▼ Kotlin : こっちはエスケープ必要なので注意!
1 2 3 4 5 |
val millis = 123456789L System.out.println("hhmmss.ll : "+ /// ミリ秒をHH:MM:.LLにフォーマット String.format("%1\$tH:%1\$tM:%1\$tS.%1\$tL", millis) ) |
こんな簡単にミリ秒⇒HHMMSS.LLに変換できるとは……
間違いなくこれを使う方がいいですね。
ミリ秒をhhmmssフォーマットする方法まとめ
最後に箇条書きでまとめときます。
以上、ミリ秒をhhmmss形式に変換でした。
他の方法もあれば教えてください。ではまた