Приблизительный период времени с Joda-Time - PullRequest
5 голосов
/ 06 января 2011

Я использую библиотеку Joda для получения периода времени, прошедшего с заданной отметки времени:

public static String getTimePassedSince(Date initialTimestamp){

        DateTime initDT = new DateTime(initialTimestamp.getTime());
        DateTime now = new DateTime();
        Period p = new Period(initDT, now);

        PeriodFormatter formatter = new PeriodFormatterBuilder()
            .appendYears().appendSuffix(" year, ", " years, ")
            .appendMonths().appendSuffix(" month, ", " months, ")
            .appendDays().appendSuffix(" day, ", " days, ")
            .appendHours().appendSuffix(" hour, ", " hours, ")
            .appendMinutes().appendSuffix(" minute, ", " minutes, ")
            .appendSeconds().appendSuffix(" second, ", " seconds")
            .printZeroNever()
            .toFormatter();

        return formatter.print(p);
    }

Функция возвращает строки точного периода времени для заданных отметок времени.Например:

3 minutes, 23 seconds
1 hour, 30 minutes, 57 seconds
1 day, 23 hours, 21 minutes, 19 seconds

Есть ли способ получить приблизительное время вместо точного?Например, если после initialTimestamp прошла одна минута и 30 секунд, возвращается только 1.5 minutes.Точно так же, если прошел час и 35 минут, он возвращает about 1.5 hours вместо 1 часа 35 минут xy секунд.

Я знаю, что возвращаемая строка может быть проанализирована и обработана, но я ищу что-то ещеизощренный.

Ответы [ 2 ]

5 голосов
/ 04 июля 2011

Посмотрите на PrettyTime .

1 голос
/ 16 января 2011

Я думаю, вам нужно создать для этого свой собственный форматер, который смотрит на точку и определяет, в какой степени детализации вы хотите ее отформатировать, скажем, за 63 секунды «1 минута» или за 3 часа 48 минут:3 часа".Похоже, вы хотите сообщить только одну большую единицу времени и игнорировать более детальные.Вам нужно будет определить поведение округления и способ отображения времени в днях: «44 дня назад» или «один месяц назад» или «1 месяц и 2 недели назад».

Я не знаю ни о какихуниверсальная утилита, которая делает это, но я тоже не искал.

...