【问题标题】:My PeriodFormatter is not behaving as I expect - what have I done wrong?我的 PeriodFormatter 没有像我预期的那样表现 - 我做错了什么?
【发布时间】:2012-11-21 00:09:12
【问题描述】:

我在使用 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。但我仍然需要一个好的方法来做到这一点......

【问题讨论】:

    标签: java datetime jodatime


    【解决方案1】:

    您的问题是您没有要求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
    

    【讨论】:

    • 您在几周内缺少分隔符 - 已添加。
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2016-06-19
    相关资源
    最近更新 更多