Как отформатировать прошедший интервал времени в формате чч: мм: сс.сс в Java? - PullRequest
34 голосов
/ 15 июля 2011

Я делаю секундомер, где использую Java SimpleDateFormat для преобразования количества миллисекунд в хороший формат "чч: мм: сс: SSS". Проблема в том, что в поле часов всегда есть случайное число. Вот код, который я использую:

public static String formatTime(long millis) {
    SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss.SSS");

    String strDate = sdf.format(millis);
    return strDate;
}

Если я снимаю часть чч, то она работает нормально. В противном случае в части hh будет отображаться что-то случайное, например «07», даже если переданный аргумент (число миллисекунд) равен нулю.

Хотя я не знаю много о классе SimpleDateFormat. Спасибо за любую помощь.

Ответы [ 12 ]

0 голосов
/ 20 сентября 2016

вариант: до 24 часов

Простое форматирование за прошедшее время менее 24 часов. В течение 24 часов код будет отображать только часы в течение следующего дня и не будет добавлять прошедший день к часам.

public static String formatElapsedTime(long milliseconds) {

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

    return sdf.format(milliseconds);
}

Отсутствуют функции в примере кода:

  • Устранить часовой пояс с "UTC"
  • Используйте 24-часовой формат "ЧЧ"

Вариант: более 24 часов

public static String formatElapsedTimeOver24h(long milliseconds) {

    // Compiler will take care of constant arithmetics
    if (24 * 60 * 60 * 1000 > milliseconds) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

        return sdf.format(milliseconds);

    } else {
        SimpleDateFormat sdf = new SimpleDateFormat(":mm:ss.SSS");
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

        // Keep long data type
        // Compiler will take care of constant arithmetics
        long hours = milliseconds / (60L * 60L * 1000L);

        return hours + sdf.format(milliseconds);
    }
}
0 голосов
/ 21 февраля 2013

Использование простой Java Calendar для интервалов до одного дня (24 часа) см. Мой ответ на вопрос: Как отформатировать временные интервалы в Java?

...