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());
我在 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());