Meine Periodenformatatter verhält sich nicht wie ich erwarte - was habe ich falsch gemacht?

StackOverflow https://stackoverflow.com/questions/2236213

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe Probleme, Joda Time's Periodformatter zu verwenden. Ich möchte, dass einer, der Tage, Stunden, Minuten und Sekunden meldet, aber mein Versuch scheint sich um Wochen zu wegen. Was soll ich anders machen?

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)));
    }
}

BEARBEITEN: Ich denke, ich kann sehen, warum dies nicht funktioniert - dh, dass das Formatierer nur die verschiedenen Werte des Zeitraums druckt, und da Perioden für Wochen einen Wert speichern Art, dies zu tun ...

War es hilfreich?

Lösung

Das Problem in Ihrem Fall ist, dass Sie Ihre nicht fragen PeriodFormatter die Wochen anzeigen.

Zwei Möglichkeiten:

Lösung 1: Zeigen Sie die Wochen an:

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();

Die zweite Ausgabe in Ihrem Beispiel ist:

1 week, 1 minute

Lösung 2: Zeigen Sie nur die Tage an, damit Sie die verwenden müssen PeriodType.yearMonthDayTime():

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

Mit dieser zweiten Lösung können Sie Ihre behalten PeriodFormatter wie es jetzt ist. Die zweite Ausgabe in Ihrem Beispiel ist dann:

7 days, 1 minute
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top