11285


Javaで実行時間の計測処理を書こうとしたのですが、`System.currentTimeMillis()`や`System.nanoTime()`等で取得したミリ秒に対して、`hh:mm:ss
SSS`の形式で文字列を取得したいだけなのにタイムゾーン考慮の必要性まで出てきて正直戸惑っています。

Pythonまでとは言わないまでも、もう少し簡単な方法はないでしょうか？自分で実装するしかありませんか？  
Guavaの`stopWatch`クラスも見てみましたが、指定形式への変換はなさそうでした。もしかしたら見落としているかもしれませんが･･･

[code]

    long startTime = System.nanoTime();
    SimpleDateFormat date = new SimpleDateFormat("hh:mm:ss SSS");
    System.out.println(date.format((System.nanoTime() - startTime) / 1000000));
    
[/code]

上記の場合、出力結果が

[code]

    09:00:00 042
    
[/code]

と出てしまいます。


CC BY-SA 3.0
2015-06-12T05:42:48.087
11278
2015-06-18T05:53:23.367
7214
question
java
ミリ秒をhh:mm:ss SSSに簡単に変換する方法


以下のformat()メソッドを共通処理として自分で実装し、  
必要なところから呼び出すのが一番簡単ではないでしょうか？

[code]

    public static void main(String[] args) {
    
        long startTime = System.currentTimeMillis();
    
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    
        long endTime = System.currentTimeMillis();
    
        System.out.println(format(startTime, endTime));
    
    
    }
    
    private static String format(long startTime, long endTime) {
        Calendar start = Calendar.getInstance();
        Calendar end = Calendar.getInstance();
        Calendar result = Calendar.getInstance();
    
        start.setTimeInMillis(startTime);
        end.setTimeInMillis(endTime);
    
        long sa = end.getTimeInMillis() - start.getTimeInMillis() - result.getTimeZone().getRawOffset();
    
        result.setTimeInMillis(sa);
    
        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss:SSS");
    
        return sdf.format(result.getTime());
    }
    
[/code]


CC BY-SA 3.0
2015-06-12T07:04:01.650
11282
2015-06-12T07:04:01.650
10115
11278
answer


調べました。

<http://commons.apache.org/proper/commons-
lang/apidocs/org/apache/commons/lang3/time/DurationFormatUtils.html>

があるようですね。

[code]

    private static String format(long startTime, long endTime) {
    
        String diffTime = DurationFormatUtils.formatPeriod(startTime,
                endTime, "HH:mm:ss.SSS");
    
        return diffTime;
    
    }
    
[/code]


CC BY-SA 3.0
2015-06-12T08:28:58.650
11285
2015-06-12T09:16:51.007
2015-06-12T09:16:51.007
7214
10115
11278
answer


Joda-TimeではPeriodFormatterがありますが、Java8ではPeriodやDurationをフォーマットする方法は提供されていません。

<https://stackoverflow.com/questions/20827047/formatting-a-duration-in-
java-8-jsr310>


CC BY-SA 3.0
2015-06-18T05:53:23.367
11464
2015-06-18T05:53:23.367
2017-05-23T12:38:56.083
-1
241
11278
answer