Мой PeriodFormatter не ведет себя, поскольку я ожидаю - что я сделал неправильно?

Я испытываю затруднения с помощью Времени Joda PeriodFormatter. Я хочу, чтобы сообщил о днях, часах, минутах и секундах, но моя попытка, кажется, переносит недели. Что я должен делать по-другому?

import org.joda.time.DateTime;
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;

public class Problems {

    public static void main(String[] args) {

        PeriodFormatter formatter = new PeriodFormatterBuilder()
            .printZeroNever()
            .appendDays()
            .appendSuffix(" day", " days")
            .appendSeparator(", ")
            .appendHours()
            .appendSuffix(" hour", " hours")
            .appendSeparator(", ")
            .appendMinutes()
            .appendSuffix(" minute", " minutes")
            .appendSeparator(", ")
            .appendSeconds()
            .appendSuffix(" second", " seconds")
            .toFormatter();

        DateTime now = new DateTime();
        DateTime justUnderAWeekAgo = now.minusDays(7).plusMinutes(1);
        DateTime justOverAWeekAgo = now.minusDays(7).minusMinutes(1);
        System.out.println(now);
        System.out.println(justUnderAWeekAgo);
        System.out.println(justOverAWeekAgo);
        // I am happy with the following:
        System.out.println(
            formatter.print(new Period(justUnderAWeekAgo, now)));
        // But not with this (outputs "1 minute" but I want "7 days, 1 minute"):
        System.out.println(
            formatter.print(new Period(justOverAWeekAgo, now)));
    }
}

Править: Я предполагаю I, видят, почему это не работает - т.е. что средство форматирования просто печатает различные значения Периода, и так как Периоды хранят значение в течение многих недель, значение в течение многих дней на моем проблемном периоде действительно 0. Но мне все еще нужен хороший способ сделать это...

6
задан NellerLess 10 February 2010 в 11:17
поделиться

1 ответ

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

Два варианта:

Решение 1: Отображение недель:

PeriodFormatter formatter = new PeriodFormatterBuilder()
        .printZeroNever()
        .appendWeeks()
        .appendSuffix(" week", " weeks")
        .appendSeparator(", ")
        .appendDays()
        .appendSuffix(" day", " days")
        .appendSeparator(", ")
        .appendHours()
        .appendSuffix(" hour", " hours")
        .appendSeparator(", ")
        .appendMinutes()
        .appendSuffix(" minute", " minutes")
        .appendSeparator(", ")
        .appendSeconds()
        .appendSuffix(" second", " seconds")
        .toFormatter();

Вторым вариантом в Вашем примере будет:

1 week, 1 minute

Решение 2: Отображать только дни, поэтому Вам придется использовать PeriodType.yearMonthDayTime():

new Period(justUndeAWeekAgo, now, PeriodType.yearMonthDayTime());

Используя это второе решение, Вы можете сохранить формат PeriodFormatter в том виде, в котором он есть сейчас. Второй вывод в вашем примере будет следующим:

7 days, 1 minute
12
ответ дан 9 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

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