PrecalculatedZone - iTransitions содержит неверное значение - PullRequest
0 голосов
/ 09 января 2019

Версия Joda-Time

2.10.1

Результат TimeZone.getDefault ()

sun.util.calendar.ZoneInfo [ID = "Европа / Белград", смещение = 3600000, dstSavings = 3600000, useDaylight = верно, переходы = 119, lastRule = java.util.SimpleTimeZone [ID = Европа / Белград, смещение = 3600000, dstSavings = 3600000, useDaylight = верно, StartYear = 0, StartMode = 2, StartMonth = 2, startDay = -1, startDayOfWeek = 1, = 3600000 начальный промежуток, startTimeMode = 2, endMode = 2, endMonth = 9, endDay = -1, endDayOfWeek = 1, EndTime = 3600000, endTimeMode = 2]]

Результат DateTimeZone.getDefault ()

UTC

Описание проблемы

Смещение выбрано неправильно для PrecalculatedZone. iTransitions содержит неправильное значение (для тестового примера ниже)

iTransitions = {long[3]@751} 0 = -9223372036854775808 1 = 947030400000 (2000-01-05T00:00:00.000Z) 2 = 947196000000 (2000-01-06T22:00:00.000Z) <- 22:00 вместо 00: 00 </strong>

originalDateTimeZone - UTC.

public void testPrecalculatedZoneOffsets() throws IOException {
DateTime minimumDate = new DateTime(1, 1, 1, 0, 0, 0, originalDateTimeZone);

DateTime firstDate = new DateTime(2000, 1, 5, 0, 0, 0, originalDateTimeZone);
DateTime secondDate = firstDate.plusDays(2);
int OFFSET = 120 * MILLIS_PER_MINUTE;
DateTimeZoneBuilder builder = new DateTimeZoneBuilder()
        .setStandardOffset(0)
        .addRecurringSavings("Offset initializing DST rule " + minimumDate.toString(), 0,
                minimumDate.getYear(), minimumDate.getYear(), 'w', 1, 1, 0, false, minimumDate.getMillisOfDay())
        .addCutover(firstDate.getYear(), 'w', firstDate.getMonthOfYear(), firstDate.getDayOfMonth(), 0, false, firstDate.getMillisOfDay())
        .setStandardOffset(OFFSET)
        .addRecurringSavings("Offset initializing DST rule " + firstDate.toString(),
                0, firstDate.getYear(),
                firstDate.getYear(), 'w', firstDate.getMonthOfYear(),
                firstDate.getDayOfMonth(), 0, false, 0)
        .addCutover(secondDate.getYear(), 'w', secondDate.getMonthOfYear(), secondDate.getDayOfMonth(), 0, false, secondDate.getMillisOfDay())
        .setStandardOffset(0)
        .addRecurringSavings("Offset initializing DST rule " + secondDate.toString(),
                0, secondDate.getYear(),
                secondDate.getYear(), 'w', secondDate.getMonthOfYear(),
                secondDate.getDayOfMonth(), 0, false, 0);

DateTimeZone dateTimeZone = builder.toDateTimeZone("ID", false);

//Failing assertion
assertEquals(OFFSET, dateTimeZone.getOffset(secondDate.minusMinutes(1)));

assertEquals(OFFSET, dateTimeZone.getOffset(secondDate.minusDays(1)));
assertEquals(0, dateTimeZone.getOffset(secondDate.plusDays(1)));}

Что-то не так с тестовым набором или с вычислением iTransitions?

...