Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的PeriodFormatter没有像我预期的那样运行-我做错了什么?_Java_Datetime_Jodatime - Fatal编程技术网

Java 我的PeriodFormatter没有像我预期的那样运行-我做错了什么?

Java 我的PeriodFormatter没有像我预期的那样运行-我做错了什么?,java,datetime,jodatime,Java,Datetime,Jodatime,我在使用Joda Time的周期格式化程序时遇到问题。我想要一个报告天,小时,分钟和秒,但我的尝试似乎在几周左右结束。我应该做些什么不同的事情 import org.joda.time.DateTime; import org.joda.time.Period; import org.joda.time.format.PeriodFormatter; import org.joda.time.format.PeriodFormatterBuilder; public class Problem

我在使用Joda Time的周期格式化程序时遇到问题。我想要一个报告天,小时,分钟和秒,但我的尝试似乎在几周左右结束。我应该做些什么不同的事情

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。但是我仍然需要一个很好的方法来做到这一点…

您的案例中的问题是您没有要求您的
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()

使用第二种解决方案,您可以保持
PeriodFormatter
的现状。然后,示例中的第二个输出将是:

7 days, 1 minute

你这几周缺少一个分隔符-补充道。
7 days, 1 minute