Форматирование периода времени - PullRequest
3 голосов
/ 21 декабря 2009

В Java у меня есть длинное целое число, представляющее период времени в миллисекундах. Период времени может составлять от нескольких секунд до нескольких недель. Я хотел бы вывести этот период времени в виде строки с соответствующей единицей.

Например, 3000 должны быть выведены как «3 секунды», 61 200 000 должны быть выведены как «17 часов», а 1 814 400 000 - как 3 недели.

В идеале я бы также смог точно настроить форматирование подразделений, например, 62 580 000 могут быть выведены как «17 часов, 23 минуты».

Существуют ли какие-либо классы Java, которые справляются с этим?

Ответы [ 4 ]

7 голосов
/ 21 декабря 2009

См. Также DurationFormatUtils в общих списках Apache.

7 голосов
/ 21 декабря 2009

Библиотека Joda может сделать это за вас:

PeriodFormatter yearsAndMonths = new PeriodFormatterBuilder()
 .printZeroAlways()
 .appendYears()
 .appendSuffix(" year", " years")
 .appendSeparator(" and ")
 .printZeroRarely()
 .appendMonths()
 .appendSuffix(" month", " months")
 .toFormatter();
0 голосов
/ 14 февраля 2013
        //Something like this works good too         
        long period = ...;
        StringBuffer sb = new StringBuffer();
        sb.insert(0, String.valueOf(period % MILLISECS_IN_SEC) + "%20milliseconds");
        if (period > MILLISECS_IN_SEC - 1)
            sb.insert(0, String.valueOf(period % MILLISECS_IN_MIN / MILLISECS_IN_SEC) + "%20seconds,%20");
        if (period > MILLISECS_IN_MIN - 1)
            sb.insert(0, String.valueOf(period % MILLISECS_IN_HOUR / MILLISECS_IN_MIN) + "%20minutes,%20");
        if (period > MILLISECS_IN_HOUR - 1)
            sb.insert(0, String.valueOf(period % MILLISECS_IN_DAY / MILLISECS_IN_HOUR) + "%20hours,%20");
        if (period > MILLISECS_IN_DAY - 1)
            sb.insert(0, String.valueOf(period / MILLISECS_IN_DAY) + "%20days,%20");

        return sb.toString();
0 голосов
/ 21 декабря 2009

Проверьте пакет формата joda-time

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...