JodaTime持续时间的格式化字符串

时间:2017-03-16 09:33:38

标签: java jodatime

我正在尝试从JodaTime的持续时间类中获取格式化字符串。

Duration duration = new Duration(durationInSecond * 1000);
PeriodFormatter formatter = new PeriodFormatterBuilder()
                .appendDays()
                .appendSuffix(" days, ")
                .appendHours()
                .appendSuffix(" hours, ")
                .appendMinutes()
                .appendSuffix(" minutes and ")
                .appendSeconds()
                .appendSuffix(" seconds")
                .toFormatter();
String formattedString = formatter.print(duration.toPeriod());

formattedString的值应为

  

65天,3小时,5分20秒

但它是

  

1563小时,5分20秒

1563小时是65天3小时,但是格式化程序没有以这种方式打印。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

我发现使用PeriodFormat.getDefault()有助于创建PeriodFormatter,而无需使用PeriodFormatterBuilder完成所有额外的工作并创建自己的。它给出了相同的结果。

答案 1 :(得分:1)

您可以使用PeriodTypePeriod.normalizedStandard(org.joda.time.PeriodType)来指定您感兴趣的字段。

在您的情况下PeriodType.dayTime()似乎合适。

Duration duration = new Duration(durationInSecond * 1000);
PeriodFormatter formatter = new PeriodFormatterBuilder()
        .appendDays()
        .appendSuffix(" days, ")
        .appendHours()
        .appendSuffix(" hours, ")
        .appendMinutes()
        .appendSuffix(" minutes, ")
        .appendSeconds()
        .appendSuffix(" seconds")
        .toFormatter();

Period period = duration.toPeriod();
Period dayTimePeriod = period.normalizedStandard(PeriodType.dayTime());
String formattedString = formatter.print(dayTimePeriod);

System.out.println(formattedString);