首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Joda-Time PeriodFormatter显示“负”时间段

使用Joda-Time PeriodFormatter显示“负”时间段
EN

Stack Overflow用户
提问于 2011-06-17 22:59:51
回答 2查看 5.1K关注 0票数 3

我在一个项目中使用了joda-time (1.6.2),我正在做的一件事就是得到预测时间和实际时间之间的差值。这种差异有时是积极的,有时是消极的。虽然合适的方法可能是使用Duration而不是Period,但是使用PeriodFormatter显示结果让我遇到了关于PeriodFormatterBuilder类的问题。举个例子:

代码语言:javascript
复制
DateTime d1 = new DateTime(2011, 6, 17, 13, 13, 5, 0) ;
DateTime d2 = new DateTime(2011, 6, 17, 10, 17, 3, 0) ;

Period negativePeriod = new Period(d1, d2);
Period positivePeriod = new Period(d2, d1);

PeriodFormatter pf = new PeriodFormatterBuilder()
    .minimumPrintedDigits(2)
    .appendHours()
    .appendSuffix(":")
    .rejectSignedValues(true) // Does this do anything?
    .appendMinutes()
    .appendSuffix(":")
    .appendSeconds()
    .toFormatter();

System.out.printf("Negative Period: %s\n", pf.print(negativePeriod));
System.out.printf("Positive Period: %s\n", pf.print(positivePeriod));

此命令的输出为:

代码语言:javascript
复制
Negative Period: -02:-56:-02
Positive Period: 02:56:02

我知道Period分别存储日期和时间的每个部分,但对我来说,构建Formatter.rejectSignedValues(true)方法的预期行为是只显示第一个元素的-符号,例如:

代码语言:javascript
复制
Negative Period: -02:56:02

是我误解了API,还是这是个bug?JodaStephen?有没有人?

显示我想要的内容并不难,但我只是对Builder方法感到好奇。

谢谢,

-Manuel

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-21 16:07:44

rejectSignedValues的Javadoc说的是Reject signed values when parsing the next and following appended fields,即。它只影响解析,不影响打印。

您的提案可能会带来有用的增强,但不能保证所有组件都是积极的,或者都是消极的。这也是一个有效的句号:P-6D8H (正负混合)。

票数 1
EN

Stack Overflow用户

发布于 2017-02-22 02:01:29

我像这样解决否定的问题:

代码语言:javascript
复制
 Duration dToFormat = duration;
    if (duration.getStandardMinutes() < 0) {
        dToFormat = duration.minus(duration).minus(duration);
    }

    ...

    if (duration.getStandardMinutes() < 0) {
                return "-"+pf.print(p); // leading minus
            }

以及我的例子中的所有代码:

代码语言:javascript
复制
public static String durationToHHHmmFormat(Duration duration, String separator){
        if ( duration == null ) {
            return null;
        }

        Duration dToFormat = duration;
        if (duration.getStandardMinutes() < 0) {
            dToFormat = duration.minus(duration).minus(duration);
        }

        Period p = dToFormat.toPeriod();
        PeriodFormatter pf = new PeriodFormatterBuilder()
            .printZeroAlways()
            .minimumPrintedDigits(2) // gives the '01'
            .appendHours()
            .appendSeparator(separator)
            .appendMinutes()
            .toFormatter();

        if (duration.getStandardMinutes() < 0) {
            return "-"+pf.print(p); // leading minus
        }
        return pf.print(p);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6387723

复制
相关文章

相似问题

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