【问题标题】:How to convert a Duration to Period in Joda?如何在 Joda 中将持续时间转换为期间?
【发布时间】:2015-02-05 15:15:31
【问题描述】:

有人可以解释为什么以下测试失败了吗?

@Test
public void testDuration() {
    Duration duration = Duration.standardDays(1);
    assertTrue(duration.getStandardMinutes() == 1440); //OK
    assertTrue(duration.toPeriod().getMinutes() == 1440); //NOK. result = 0
    assertTrue(new Period(duration.getMillis()).getMinutes() == 1400); //NOK. result = 0
}

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    JodaTime 中的Period 代表"set of duration field values"。因此,getMinutes()getHours() 等方法返回的是这些字段的值,而不是计算分钟、小时、...

    此外,从Duration 的转换根据PeriodType 和年表设置字段。

    来自 API (http://joda-time.sourceforge.net/apidocs/org/joda/time/ReadableDuration.html#toPeriod%28%29):

    周期 toPeriod()

    使用标准周期类型和 ISO 年表将此持续时间转换为周期实例。

    仅使用期间类型中的精确字段。因此,只会使用时间段上的小时、分钟、秒和毫秒字段。不会填充年、月、周和日字段。

    如果持续时间很短,小于 1 天,那么此方法将按照您的预期执行并平均分割字段。如果持续时间大于一天,则所有剩余持续时间将存储在最大的可用字段中,在这种情况下为小时。

    这意味着,Duration 的一天正好有 24 小时,所有信息都存储在小时字段中,分钟保持为 0。

    请参阅this question,了解IntervalDurationPeriod 之间的区别。

    【讨论】:

      【解决方案2】:

      here

      1 天不等于 24 小时,1 小时也不等于 60 分钟。这是因为时间段代表时间段的抽象定义(例如,一天实际上可能不是 24 小时,在夏令时边界可能是 23 或 25)。

      【讨论】:

        猜你喜欢
        • 2020-03-30
        • 2020-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多