加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 我的PeriodFormatter表现不像我期望的那样 – 我做错了

发布时间:2020-12-14 05:36:56 所属栏目:Java 来源:网络整理
导读:我在使用Joda Time的PeriodFormatter时遇到了麻烦.我想要一个人报告日,小时,分钟和秒钟,但我的尝试似乎在几周之内.我应该做些什么呢? import org.joda.time.DateTime;import org.joda.time.Period;import org.joda.time.format.PeriodFormatter;import org.
我在使用Joda Time的PeriodFormatter时遇到了麻烦.我想要一个人报告日,小时,分钟和秒钟,但我的尝试似乎在几周之内.我应该做些什么呢?
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)));
    }
}

编辑:我想我可以看到为什么这不起作用 – 即格式化程序只打印Period的各种值,并且由于Periods存储了一个值数周,我的问题期间的天数值确实为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():

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

使用第二个解决方案,您可以保持PeriodFormatter现在的状态.您的示例中的第二个输出将是:

7 days,1 minute

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读