Mon PeriodFormatter ne se comporte pas comme je le pense - qu'est-ce que je fait de mal?

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

  •  19-09-2019
  •  | 
  •  

Question

Je ne parviens pas à l'aide de PeriodFormatter Joda Time. Je veux un à signaler jours, heures, minutes et secondes, mais ma tentative semble être enroulant autour semaines. Que dois-je faire autrement?

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

EDIT: Je suppose que je ne vois pas pourquoi cela ne fonctionne pas - à savoir que le formatter qu'afficher différentes valeurs de la période, et puisque les périodes de stocker une valeur pendant des semaines, la valeur pour les jours sur mon période de problème est en effet 0. Mais je dois encore une bonne façon de le faire ...

Était-ce utile?

La solution

Le problème dans votre cas est que vous ne demandez pas votre PeriodFormatter pour afficher les semaines.

Deux possibilités:

Solution 1: Afficher les semaines:

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 deuxième sortie dans votre exemple sera:

1 week, 1 minute

Solution 2: Afficher uniquement les jours de sorte que vous devrez utiliser le PeriodType.yearMonthDayTime():

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

En utilisant cette deuxième solution, vous pouvez garder votre PeriodFormatter comme il est maintenant. La deuxième sortie dans votre exemple sera alors:

7 days, 1 minute
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top