Ошибка в период йодатиме? - PullRequest
1 голос
/ 27 октября 2010

Почему этот тест, который я написал, терпит неудачу в jodatime 1.6.2?Это ошибка?

@Test
 public void testIfJodaTimePeriodsHandlesPeriodTypesOtherThanMinutesAndHours() {
  long twentyDaysInMillis = TimeUnit.MILLISECONDS.convert(20, TimeUnit.DAYS);
  Period twoWeeks = new Period(twentyDaysInMillis, PeriodType.weeks());
  Assert.assertEquals(2, twoWeeks.getWeeks()); 
// twoWeeks.getWeeks() actually returns 0!!
 }

FYI, Периоды со всеми типами PeriodTypes заполняют поля только в течение минут и часов, даже если миллис, переданный в конструктор, составляет более 25 часов.Это нелогично.

1 Ответ

5 голосов
/ 27 октября 2010

Вот как Period работает в JodaTime.

Period имеет точные поля (часы, минуты, секунды, миллисекунды) и неточные поля (другие).Неточные поля могут зависеть от перехода на летнее время.Таким образом, Period из 24 часов может быть меньше дня или больше дня на границе перехода на летнее время.

Следовательно, конструкторы, которые занимают миллисекунды, заполняют только точные поля.Для инициализации неточных полей (без учета перехода на летнее время) необходимо:

Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks()); 

См. Также:

...