Joda-time Period似乎没有正确计算天数

时间:2016-10-24 21:56:13

标签: java jodatime period

我在Joda-time Period课程中看到了一些奇怪的行为 - 特别是日期处理。在以下示例代码中,我指定的时间为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小时。

知道我做错了什么吗?

1 个答案:

答案 0 :(得分:3)

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

要将其强制为24小时/天,您需要具体确定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());