Автоматическое смещение месяца/дня при построении LocalDate

Этот код

LocalDate date = LocalDate.of(2019, 4, 31);

Выдает эту ошибку:

java.time.DateTimeException: Invalid date 'APRIL 31'

Мне нужно построить дату на основе заданного количества дней, в данном случае 31, но поскольку в апреле всего 30 дней, я получаю исключение. В приведенном выше примере я должен получить 1 мая, возможно ли это сделать с библиотекой java.time или нужно кодировать вручную?

Вероятно, было бы проще, если бы вы добавляли дни к базовой дате, верно? Нравится LocalDate.of(2019,4,1).plusDays(31);

Matias Fuentes 08.04.2019 23:42

Да, так и будет, спасибо за идею

ps0604 08.04.2019 23:45

но имейте в виду, что это дано 2 мая

user85421 08.04.2019 23:54

Да, я знаю, нужно от количества дней отнять 1

ps0604 08.04.2019 23:57

@ОлеВ.В. Хорошая идея, сделано.

Matias Fuentes 09.04.2019 00:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
5
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как я упоминал в комментариях, было бы проще, если бы вы добавили дни к базовой дате, например так:

LocalDate.of(2019,4,1).plusDays(31);

Если вы действительно хотите это сделать, вы можете попробовать это вместо plusDay:

LocalDate.parse("2018-04-31", DateTimeFormatter.ISO_LOCAL_DATE.withResolverStyle(ResolverStyle.LENIENT))

Он дает 2018-05-01 по запросу. Поскольку задающий вопрос представляет собой три целых числа, а не строку, в данном случае это кажется не очень важным.

Ole V.V. 09.04.2019 06:16

Другие вопросы по теме