Bug en el Período JodaTime?
Pregunta
¿Cómo es que esta prueba no escribí en JodaTime 1.6.2? ¿Es un error?
@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, períodos con todos PeriodTypes sólo llena en los campos para los minutos y horas, incluso si los millis pasados ??al constructor asciende a más de 25 horas. Esto es contrario a la intuición.
Solución
Así es como funciona Period
en JodaTime.
Period
tiene campos precisas (horas, minutos, segundos, milisegundos) y campos imprecisos (otro). campos imprecisas pueden verse afectados por los cambios de horario. Es decir, Period
de 24 horas puede ser menor que un día o más de un día en un horario de verano límite.
Por lo tanto, constructores que toman milisegundos pueblan únicos campos precisos. Para inicializar los campos imprecisos (sin tomar en cuenta el horario de verano) que necesita:
Period twoWeeks = new Period(twentyDaysInMillis).normalizedStandard(PeriodType.weeks());
Ver también: