Il mio PeriodFormatter non si comporta come mi aspetto - quello che ho fatto di male?

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

  •  19-09-2019
  •  | 
  •  

Domanda

Ho problemi con PeriodFormatter di Joda Time. Voglio uno per segnalare giorni, ore, minuti e secondi, ma il mio tentativo sembra essere avvolgono settimane. Cosa dovrei fare diversamente?

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

Modifica Credo di poter capire perché questo non sta funzionando - vale a dire che il formattatore si limita a stampare diversi valori del periodo, e poiché periodi memorizzare un valore per settimane, il valore per i giorni sul mio periodo problema è effettivamente 0. Ma ho ancora bisogno di un buon modo di fare questo ...

È stato utile?

Soluzione

Il problema nel tuo caso è che non chiedete al vostro PeriodFormatter per visualizzare i settimane.

Due possibilità:

Soluzione 1: Display settimane:

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

La seconda uscita nel tuo esempio sarà:

1 week, 1 minute

Soluzione 2: Visualizza solo i giorni in modo da avere per utilizzare il PeriodType.yearMonthDayTime():

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

Con questa seconda soluzione, è possibile mantenere il PeriodFormatter come è ora. La seconda uscita nel tuo esempio sarà quindi:

7 days, 1 minute
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top