Javaでミリ秒をhh:mm:sss.SSSへフォーマット変換

  • 2020.06.20
  • 2021.01.24
  • Java
NO IMAGE

ミリ秒を一個一個計算して、フォーマット変換していきます。

まずは実際のコードとその後に使う機能の紹介をします。

ファイル構成

今回は簡単なファイル構成です。
(ファイル名は別名でももちろん大丈夫です。適当につけてあります。)
フォーマットさえ作ってくれればいいので関数もMainの中に書いちゃいました。

convertTime
├── src
    └── Main.java 
└── readMemo.txt

流れとしてはreadMemo.txtにミリ秒一覧が書かれてあるので、
それを読み込んで、フォーマット変換をして、System.out.println() で表示する流れです。

まずはMain.javaはこんな感じです。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

/**
 * ミリ秒をhh:mm:ss.SSS形式へ変換
 */
public class Main {
	public static void main(String[] args) {
		try {
			File file = new File("readMemo.txt");
			BufferedReader br = new BufferedReader(new FileReader(file));
			String str;
			while ((str = br.readLine()) != null) {
				formatConvert(str);
			}
			br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * ミリ秒文字列の変換
	 * @param s_num
	 */
	public static void formatConvert(String s_num) {
		
		StringBuilder sb = new StringBuilder();
		try {
			Integer num = Integer.parseInt(s_num);
			if (1000 <= num) {
				num = Integer.parseInt(s_num.substring(0, s_num.length() - 3));
				
				int hh = num / 3600;
				int mm = num % 3600 / 60;
				int ss = num % 3600 % 60;
				sb.append(zeroFill2(hh)).append(":")
				.append(zeroFill2(mm)).append(":")
				.append(zeroFill2(ss)).append(".")
				.append(s_num.substring(s_num.length() - 3, s_num.length()));
				
			} else {
				// 999ミリ秒以下は計算の必要なし
				sb.append("00:00:00.").append(num);
			}
		} catch (Exception e) {
			// 数値以外だとエラー発生(そのまま表示)
			sb.append(s_num);
		}
		System.out.println(sb.toString());
	}

	/**
	 * 数値二桁表示
	 * @param num
	 * @return
	 */
	public static String zeroFill2(int num) {
		String str = String.format("%02d", num);
		return str;
	}
}

あとは変換したいミリ秒一覧をreadMemo.txtに記入するだけです。

1234567
1111111
22222222
33333333
44444444
abcdefg
55555555
11111111111111111111
55555555

上記を記入して、実行すると以下のような表示結果になったと思います。

00:20:34.567
00:18:31.111
06:10:22.222
09:15:33.333
12:20:44.444
abcdefg
15:25:55.555
11111111111111111111
15:25:55.555

文字列の場合はそのまま表示するようにしました。
数値が大きすぎても、そのまま表示されるみたいです。
(実行するまでどうなるか分からなかったorz)

では、簡単にコードの中を紹介します。

コード紹介

テキストファイルの読み込み

File file = new File("readMemo.txt");
BufferedReader br = new BufferedReader(new FileReader(file));

try-catchで書いて通常だとFileNotFoundExceptionとIOException等の
エラーが発生すると思うのでこちらでcatchするのがいいのかもしれないです。

今回は動けばいいと思ったのでExceptionでcatchしてます。

二桁表示

String str = String.format("%02d", num);

%02dを指定して、numが一桁の場合0をつけて二桁にしてくれます。
%03dや%04dを指定すると3桁、4桁表示にすることができます。

文字列の数値からIntegerの数値へ変換

num = Integer.parseInt(s_num.substring(0, s_num.length() - 3));

Integer.parseInt(“123”) で数値へ変換できます。
数値ではない文字列 “abc” 等だとNumberFormatExceptionが発生します。

文字の抜き出し

num = Integer.parseInt(s_num.substring(0, s_num.length() - 3));

String str = “abcdef”.substring(0, 4);
こちらで0番目から4番目を抜き出してくれます。
str には”abcd”までが入っています。

第二引数に s_num.length() – 3 とすることで、後ろから3文字を除外してます。

今回はミリ秒からの変換なので999ミリ秒以下は
計算の邪魔になるので後ろから3文字を除外しました。

以上、ミリ秒からhh:mm:sss.SSSへフォーマット変換でした。

Javaカテゴリの最新記事