2016-10-24 7 views
1

Я вижу странное поведение в классе Joda-time Period - особенно в дни обработки. В следующем примере кода я указываю период в 26 часов в миллисекундах.Время, похоже, Joda-Time Period не соответствует действительности.

// 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 часов.

Любая идея, что я делаю неправильно?

ответ

2

Оказывается, что Joda-time является калитки 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());