Как использовать время joda для форматирования фиксированного количества миллисекунд в чч: мм: сс? - PullRequest
2 голосов
/ 31 марта 2011

У меня есть ввод, 34600 миллисекунд. Я хотел бы вывести его в формате 00:00:34 (ЧЧ: ММ: СС).

Какие классы мне следует посмотреть на JDK / Joda-time для этого?Мне нужно, чтобы это было эффективно, предпочтительно потокобезопасно, чтобы избежать создания объектов при каждом разборе.

Спасибо.

- EDIT -

Использование этого кода создает часовой поясчувствительные результаты, как я могу убедиться, что форматирование является "естественным", то есть использует абсолютные значения.

import java.util.Locale;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;


public class Test {
    public static void main(String[] args) {
        DateTimeFormatter fmt = DateTimeFormat.forPattern("kk:mm:ss").withLocale(new Locale("UTC"));
        System.out.println(fmt.print(34600));
    }
}

Результаты в 02 : 00: 34 - + 2 часа, потому что мое времязона GMT + 2.В то время как ожидаемый результат составляет 00: 00: 34.

Ответы [ 2 ]

10 голосов
/ 31 марта 2011

Для решения Joda, попробуйте (учитывая ваш обновленный вопрос):

PeriodFormatter fmt = new PeriodFormatterBuilder()
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendHours()
        .appendSeparator(":")
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendMinutes()
        .appendSeparator(":")
        .printZeroAlways()
        .minimumPrintedDigits(2)
        .appendSeconds()
        .toFormatter();
Period period = new Period(34600);
System.out.println(fmt.print(period));

Выходы:

00:00:34

Относительно вашего предпочтения безопасности потоков:

PeriodFormatterBuilder сам по себе является изменяемым и не поточно-ориентированным, но создаваемые им средства форматирования являются поточно-ориентированными и неизменяемыми.

(из документации PeriodFormatterBuilder )

3 голосов
/ 31 марта 2011

Вы могли бы использовать String.format?

long millis = 34600;
long hours = millis/3600000;
long mins = millis/60000 % 60;
long second = millis / 1000 % 60;
String time = String.format("%02d:%02d:%02d", hours, mins, secs);
...