2

当 x 超过 3600 秒时,有没有办法将 'x' 秒转换为 y 小时和 z 秒?同样,当 x 超过 60 但小于 3600 秒时,使用 JodaTime?我知道我必须在 PeriodFormatter 中指定我需要的内容,但我不想指定它 - 我想要一个基于秒值的格式化文本。

这类似于您在论坛上发帖的方式,然后您的帖子最初将显示为“10 秒前发布”。1 分钟后,您会看到“1 分钟 20 秒前发布”,几周、几天、几年也是如此。

4

2 回答 2

12

我不确定你为什么不想在PeriodFormatter. JodaTime不知道您想如何将句点显示为字符串,因此您需要通过PeriodFormatter.

由于 3600 秒是 1 小时,因此正确使用格式化程序会自动为您执行此操作。这是一个代码示例,在同一格式化程序上使用了许多不同的输入,应该可以达到您想要的结果。

    Seconds s1 = Seconds.seconds(3601);
    Seconds s2 = Seconds.seconds(2000);
    Seconds s3 = Seconds.seconds(898298);
    Period p1 = new Period(s1);
    Period p2 = new Period(s2);
    Period p3 = new Period(s3);
    
    PeriodFormatter dhm = new PeriodFormatterBuilder()
        .appendDays()
        .appendSuffix(" day", " days")
        .appendSeparator(" and ")
        .appendHours()
        .appendSuffix(" hour", " hours")
        .appendSeparator(" and ")
        .appendMinutes()
        .appendSuffix(" minute", " minutes")
        .appendSeparator(" and ")
        .appendSeconds()
        .appendSuffix(" second", " seconds")
        .toFormatter();
    
    System.out.println(dhm.print(p1.normalizedStandard()));
    System.out.println(dhm.print(p2.normalizedStandard()));
    System.out.println(dhm.print(p3.normalizedStandard()));

产生输出::

1小时1秒

33 分 20 秒

3天9小时31分38秒

于 2012-06-05T07:30:48.633 回答
4

我喜欢上一个答案,但这个选项看起来更具可读性:

PeriodFormat.getDefault().print(new Period(0, 0, yourSecondsValue, 0)
    .normalizedStandard())
于 2014-11-26T08:25:29.170 回答