6

Joda Time の 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)));
    }
}

編集:これが機能しない理由がわかると思います-つまり、フォーマッタは期間のさまざまな値を出力するだけであり、期間は週の値を保存するため、問題の期間の日の値は実際には0です.しかし、私はまだ必要ですこれを行う良い方法...

4

1 に答える 1

12

PeriodFormatterあなたの場合の問題は、週を表示するように頼まないことです。

2 つの可能性:

解決策 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();

例の 2 番目の出力は次のようになります。

1 week, 1 minute

解決策 2: 日のみを表示するため、以下を使用する必要がありますPeriodType.yearMonthDayTime()

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

この 2 番目のソリューションを使用するPeriodFormatterと、現在の状態を維持できます。例の 2 番目の出力は次のようになります。

7 days, 1 minute
于 2010-02-10T11:24:55.603 に答える