Jodatime IllegalInstantException - PullRequest
       36

Jodatime IllegalInstantException

0 голосов
/ 02 октября 2018

Я попробовал почти все в этом фрагменте, и я все еще получаю IllegalInstentException.

public int getDateDay() {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTime dt;
    try {
        dt = formatter.parseDateTime(date);
    } catch (IllegalInstantException e) {
        dt = formatter.parseLocalDateTime(date).toDateTime();
    }
    return dt.getDayOfMonth();
}

Неустранимое исключение: org.joda.time.IllegalInstantException Недопустимый момент из-за перехода смещения часового пояса ('разрыв' летнего времени): 2018-10-21T00: 00: 00.000 (Америка / Сан-Паулу) клавиатура_arrow_up arrow_right org.joda.time.chrono.ZonedChronology.localToUTC (ZonedChronology.java:157) org.joda.time.chrono.ZonedChronology.getDateTimeMillis (ZonedChronology.java:122) org.joda.time.chrono.AssembledChronology.getDateTimeMillis (AssembledChronology.java:133) org.joda.time.base.BaseDateTime.(BaseDateTime.java:257) org.joda.time.DateTime.(DateTime.java:532) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:750) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:731)

1 Ответ

0 голосов
/ 02 октября 2018

Кажется, ввод не является действительной датой.Проблема обсуждалась на этой странице .

Причина:

Joda-Time позволяет только ключевым классам хранить действительные даты и время.Например, 31 февраля не является действительной датой, поэтому она не может быть сохранена (за исключением частичного).

Тот же принцип действительного времени и даты применяется к летнему времени (DST).Во многих местах используется летнее время, когда местные часы перемещаются вперед на час весной и обратно на час осенью / осенью.Это означает, что весной существует «разрыв», когда местное время не существует.

Ошибка «Недопустимый момент из-за перехода смещения часового пояса» относится к этому разрыву. Это означает, что ваше приложение пыталось создать дату-время в промежутке - время, которого не было. Поскольку объекты Joda-Time должны быть действительными, это недопустимо.

Возможные решения могут быть следующими:

  • Использовать LocalDateTime, поскольку все локальные даты и времени действительны.

  • При преобразованииa LocalDate для DateTime, затем используйте toDateTimeAsStartOfDay (), поскольку это обрабатывает и управляет любыми пропусками.

  • При анализе используйте parseLocalDateTime (), если анализируемая строка не имеет часового пояса.

...