Большая часть идиоматического способа распечатать разницу во времени в Java?

Я знаком с печатью разницы во времени в миллисекундах:

 long time = System.currentTimeMillis();
 //do something that takes some time...
 long completedIn = System.currentTimeMillis() - time;

Но, есть ли хорошая дорожная печать полное время в указанном формате (например: HH:MM:SS) или Apache использования палата общин или даже страшные объекты Даты/Времени API платформы? Другими словами, что является самым коротким, самым простым, никакая ерунда способ записать формат времени, полученный из миллисекунд в Java?

16
задан Zombies 24 April 2010 в 13:16
поделиться

4 ответа

Apache Commons имеет класс DurationFormatUtils для применения указанного формата к длительности времени. Итак, что-то вроде:

long time = System.currentTimeMillis();
//do something that takes some time...
long completedIn = System.currentTimeMillis() - time;

DurationFormatUtils.formatDuration(completedIn, "HH:mm:ss:SS");
22
ответ дан 30 November 2019 в 17:27
поделиться

Насколько мне известно, нет. Но printf () может сделать это легко, если вы вычисляете значения для H, M и S и используете шаблон% 02 для каждого.

1
ответ дан 30 November 2019 в 17:27
поделиться

Если вы действительно хотите увидеть разницу в миллисекундах, я не думаю, что есть более короткий и простой способ.

Если вам нужен более мощный (но, конечно, не более простой) способ сбора статистики производительности, есть Perf4J .

1
ответ дан 30 November 2019 в 17:27
поделиться

Лучше использовать библиотеку, предназначенную для этой цели, но SimpleDateFormat с правильным TimeZone может быть достаточно для периодов менее суток. Более длительные периоды требуют специальной обработки дня.

import java.text.DateFormat;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;

public class Elapsed {

    private static final long MS_DAY = 24 * 60 * 60 * 1000;
    private final DateFormat df = new SimpleDateFormat("HH : mm : ss : S");

    public Elapsed() {
        df.setTimeZone(TimeZone.getTimeZone("GMT"));
    }

    private String format(long elapsed) {
        long day = elapsed / MS_DAY;
        StringBuilder sb = new StringBuilder();
        sb.append(day);
        sb.append(" : ");
        sb.append(df.format(new Date(elapsed)));
        return sb.toString();
    }

    public static void main(String[] args) {
        Elapsed e = new Elapsed();
        for (long t = 0; t < 3 * MS_DAY; t += MS_DAY / 2) {
            System.out.println(e.format(t));
        }
    }
}

Вывод консоли:

0 : 00 : 00 : 00 : 0
0 : 12 : 00 : 00 : 0
1 : 00 : 00 : 00 : 0
1 : 12 : 00 : 00 : 0
2 : 00 : 00 : 00 : 0
2 : 12 : 00 : 00 : 0
5
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: