LoginSignup
3
4

More than 5 years have passed since last update.

【Java】millisSecondからHH:mm:ss:SSSにゴリ押しする

Last updated at Posted at 2016-09-07

 初めに

カウントダウンアプリを作ろうとして、ミリ秒から時間表示をさせるところで詰まったので自分で書いた。

問題があったもの

long型のtimeMilliSecを与えると、HH:flag_mm:ss.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"));

をコメントアウトした部分です。

3
4
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4