首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PeriodFormatter没有显示天数

PeriodFormatter没有显示天数
EN

Stack Overflow用户
提问于 2014-10-10 02:59:36
回答 2查看 1.1K关注 0票数 8

我使用一个PeriodFormatter返回一个字符串,显示事件发生前的时间。下面的代码一直在创建字符串,比如1146小时,39分钟,而不是x天,y小时,z分钟。有什么想法吗?

谢谢你,内森

代码语言:javascript
复制
   PeriodFormatter formatter = new PeriodFormatterBuilder()
                .printZeroNever()
                .appendDays()
                .appendSuffix( "d " )
                .appendHours()
                .appendSuffix( "h " )
                .appendMinutes()
                .appendSuffix( "m " )
                .toFormatter();
        return formatter.print( duration.toPeriod() );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-10 06:59:12

这是因为使用方法DurationPeriod转换为Duratoin::toPeriod

在Joda-time文档中描述了这一点:

公共期间toPeriod()使用标准期间类型和ISO时间序列将此持续时间转换为期间实例。将只使用周期类型中的精确字段。因此,只有周期上的小时、分钟、秒和毫秒字段将被使用。年、月、周和日的字段将不会被填充。

在没有开始日期(或结束日期)的情况下,无法正确计算周期,因为有些日子可能是24小时或23小时(由于DST)。

你应该用Duration::toPeriodFrom方法代替

例如。

代码语言:javascript
复制
Duration duration = new Duration(date1, date2);  
// ...  
formatter.print( duration.toPeriodFrom(date1));
票数 7
EN

Stack Overflow用户

发布于 2018-03-30 10:16:51

正如伊利亚所说,默认情况下,toPeriod方法只填充小时、分钟、秒和毫秒字段。但实际上可以使用normalizedStandard将其规范化,以便

代码语言:javascript
复制
String periodFormat(Duration d) {
    return PERIOD_FORMATTER.print(d.toPeriod().normalizedStandard());
}

static final PeriodFormatter PERIOD_FORMATTER = new PeriodFormatterBuilder()
  .appendWeeks().appendSuffix("w")
  .appendSeparator("_")
  .printZeroRarelyLast()

  .appendDays().appendSuffix("d")
  .appendSeparator("_")
  .printZeroRarelyLast()

  .appendHours().appendSuffix("h")
  .appendSeparator("_")
  .printZeroRarelyLast()

  .appendMinutes().appendSuffix("m")
  .appendSeparator("_")
  .printZeroRarelyLast()

  .toFormatter();

会过去

代码语言:javascript
复制
  @Test
  public void periodFormatTest {
    assertThat(periodFormat(Duration.standardMinutes(5))).isEqualTo("5m");
    assertThat(periodFormat(Duration.standardMinutes(60))).isEqualTo("1h");
    assertThat(periodFormat(Duration.standardDays(1))).isEqualTo("1d");
    assertThat(periodFormat(Duration.standardDays(2))).isEqualTo("2d");
    assertThat(periodFormat(Duration.standardHours(47))).isEqualTo("1d_23h");

  }:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26291271

复制
相关文章

相似问题

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