首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的PeriodFormatter并没有像我期望的那样--我做错了什么?

我的PeriodFormatter并没有像我期望的那样--我做错了什么?
EN

Stack Overflow用户
提问于 2010-02-10 10:59:05
回答 1查看 2.8K关注 0票数 6

我在使用Joda Time的PeriodFormatter时遇到了麻烦。我想要一个人报告几天、几个小时、几分钟和几秒,但我的尝试似乎是围绕着几个星期。我该怎么做?

代码语言:javascript
复制
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。但我还是需要一个很好的方法.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-10 11:24:55

在您的例子中的问题是,您没有要求您的PeriodFormatter显示的周。

有两种可能性:

解决方案1:显示周数:

代码语言:javascript
复制
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();

您的示例中的第二个输出将是:

代码语言:javascript
复制
1 week, 1 minute

解决方案2:只显示天数,因此您必须使用PeriodType.yearMonthDayTime()

代码语言:javascript
复制
new Period(justUndeAWeekAgo, now, PeriodType.yearMonthDayTime());

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

代码语言:javascript
复制
7 days, 1 minute
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2236213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档