【问题标题】:Getting JODA Duration to work让 JODA Duration 发挥作用
【发布时间】:2012-02-09 22:15:38
【问题描述】:

以下代码无法正确打印日期,我还需要打印出日期和分钟。

Duration duration = new Duration(1328223198241L - 1326308781131L);
Period p2 = new Period(duration.getMillis());
System.out.println(p2.getDays()); // prints 0, should print 22 days
System.out.println(p2.getHours()); // prints  531 which is expected.

【问题讨论】:

  • 那里的那些数字是什么?它们应该是什么意思?
  • 我打赌代码是正确的;是你的假设是错误的。检查您对预期内容的理解。

标签: java jodatime


【解决方案1】:

根据 javadoc,“只会使用 period 类型中的精确字段。对于标准 period 类型,这只是时间字段。因此,年、月、周和 day 字段将不会被填充。”因此你得到了零。

考虑这个替代方案。

Duration duration = new Duration(1328223198241L - 1326308781131L);      
Period p2 = new Period(duration.getMillis());
System.out.println(p2.getHours()); // prints  531 which is expected.
System.out.println(p2.toStandardDays().getDays()); // prints 22 days

【讨论】:

    【解决方案2】:

    the javadocs 中解释了此行为:“持续时间大于一天,那么所有剩余的持续时间将存储在最大的可用精确字段中,在这种情况下为小时。”

    如果您解释您想要做什么,而不是您想要如何做,那么我相信我们将能够提供帮助。例如,要查找我认为您想从p2.getDays() 获取的内容:

    Days.daysBetween(dateTime1, dateTime2).getDays()
    

    【讨论】:

      【解决方案3】:

      以下是否不够:System.out.println(duration.getStandardDays());

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-26
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-03-07
        • 2021-10-01
        • 2017-10-20
        相关资源
        最近更新 更多