Несмотря на то, что исходный вопрос был опубликован 5 лет назад, проблема все еще сохраняется и довольно раздражает.
Общее решение - это тщательный анализ всех ссылочных ассемблеров, чтобы понять, что происходит не так. Чтобы упростить эту задачу, я создал инструмент (расширение Visual Studio), который позволяет выбирать сборку .Net (.ddl или .exe-файл) и получать график всех ссылочных ассемблеров с прорисованными конфликтующими или пропущенными ссылками.
Инструмент доступен в галерее Visual Studio: https://marketplace.visualstudio.com/vsgallery/051172f3-4b30-4bbc-8da6-d55f70402734
atOffset
возвращает значение OffsetDateTime , которое имеет другое значение Мин / Макс.
Минимальный поддерживаемый OffsetDateTime, '-999999999-01-01T00: 00: 00 + 18: 00'.
Максимально поддерживаемое значение OffsetDateTime, '+ 999999999-12-31T23: 59: 59.999999999-18: 00'.
blockquote>В javadoc упоминается, что эти минимальные / максимальные значения получены из LocalDateTime вместе с максимальными смещениями зоны, поэтому кажется, что они не совпадают до Instant
Причина, по которой у Мгновенного есть дополнительный год в обе стороны, согласно документации Мгновенное .
Это на год раньше минимального LocalDateTime. Это обеспечивает достаточные значения для обработки диапазона ZoneOffset, которые влияют на момент в дополнение к локальной дате и времени. Значение также выбирается таким образом, чтобы значение года помещалось в целое число.
blockquote>Охватывает крайний случай, когда LocalDateTime + Offset приводит к времени предыдущего года.
Максимальным практическим значением будет минимальное значение OffsetDateTime, преобразованное в мгновенное значение, поскольку все, что находится до этой даты, является буфером, для которого нет эквивалентного OffsetDateTime.
Это не ошибка, на самом деле действие вызова
i.atOffset(ZoneOffset.UTC)
запускает создание объекта OffsetDateTime
, который javadoc четко утверждает следующее
Минимальный поддерживаемый OffsetDateTime, '-999999999-01-01T00: 00: 00 + 18: 00'.
blockquote>Так что, в принципе, если вы сохраните его
Instant
, это нормально, но попытка изменить его может вызвать проблему