初めに
カウントダウンアプリを作ろうとして、ミリ秒から時間表示をさせるところで詰まったので自分で書いた。
問題があったもの
long型のtimeMilliSecを与えると、HHss.SSSに変化してくれるようにしたのように書いたら、7時間ほど時間がずれてしまった。( 0を与えると 07:00:00.000 なってしまう)
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
String timeFormatted = formatter.format(timeMilliSec);
コード
これで解決?
TimeFormatter.java
public class TimeFormatter {
public static String format(long millis) {
long hour = (millis / (1000 * 60 * 60)) % 24;
long minute = (millis / (1000 * 60)) % 60;
long second = (millis / 1000) % 60;
long millisSec = millis % 1000;
String time = String.format("%02d:%02d:%02d:%03d", hour, minute, second, millisSec);
return time;
}
}
使用例
9342633ミリ秒を、02:35:42:554 に変換してみる。
int hour = 2;
int minute = 35;
int second = 42;
long time = (hour * 3600 + minute * 60 + second) * 1000 + 633;
String formattedTime = TimeFormatter.format(time);
追記
SimpleDateFormatを使う
タイムゾーンの関係でGenymotionで動かしていた時に時間がずれてしまっていたようです。
変なクラス作らなくとも、JavaのAPI使えばいけるそうです!
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
String timeFormatted = formatter.format(time);
別の環境で試して見る
記事とは関係ないですが、今勉強中のフレームワークでも動かしてみました。
PlayFrameworkを使ってChrome上で実行した時にも時間がずれる現象が確認できました。
一番右がタイムゾーンを設定する
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
をコメントアウトした部分です。