ミリ秒を一個一個計算して、フォーマット変換していきます。
まずは実際のコードとその後に使う機能の紹介をします。
ファイル構成
今回は簡単なファイル構成です。
(ファイル名は別名でももちろん大丈夫です。適当につけてあります。)
フォーマットさえ作ってくれればいいので関数も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へフォーマット変換でした。
コメント