Joda-time Period 似乎无法正确计算天数

Joda-time Period doesn't seem to calculate days correctly

我在 Joda 时间 Period class 周围看到了一些奇怪的行为——特别是处理天数。在下面的示例代码中,我将 26 小时的时间段指定为毫秒。

// 26 hour duration
long durationMillis = 26 * 3600 * 1000;
Period period = new Period(durationMillis, PeriodType.dayTime());
// this fails because days == 0
assertEquals(1, period.getDays());
// this would fail because hours == 26
assertEquals(2, period.getHours());

我原以为 Period 会看到 26 小时是 1 天零 2 小时,但它似乎没有意识到一天 == 24 小时。

知道我做错了什么吗?

原来 Joda-time 是邪恶的 smaaaaart。我猜想由于夏令时和其他时区问题,它无法知道一天中的小时数。例如,任何特定的一天可能有 23 或 25 个小时。

要将其强制为 24 hours/day,您需要指定一个 Chronology 与每天的小时数保持一致。

long durationMillis = 26 * 3600 * 1000;
Period period = new Period(durationMillis, PeriodType.dayTime(),
    ISOChronology.getInstanceUTC());
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this is needed to have 1 day == 24 hours
// this works!
assertEquals(1, period.getDays());
// this works!
assertEquals(2, period.getHours());