Добавьте 1 месяц к 28 февраля, чтобы получить 31 марта.

Я пытаюсь добавить 1 месяц к датам, но проблема в том, что когда у меня есть дата 28 февраля, я добавляю еще один месяц, я получаю 28 марта. Он должен закончиться 31 марта. То же, что когда я начал с даты апреля 30, я должен закончить 31 мая, а не 30 мая. Я пытался использовать plusMonths() из Jodatime и add() из java.util.date, но все равно та же проблема.


person John    schedule 30.05.2013    source источник
comment
Итак, если это будет 2 февраля, и вы добавите месяц, какую дату вы тогда ожидаете?   -  person maba    schedule 30.05.2013
comment
это будет 2 марта.   -  person John    schedule 30.05.2013
comment
Будет ли 28 февраля 2013 г. переходить на 31 марта 2013 г., а 28 февраля 2016 г. — на 28 марта 2016 г.?   -  person Eric Jablow    schedule 30.05.2013
comment
@EricJablow да. Это возможно?   -  person John    schedule 30.05.2013


Ответы (1)


Ваше ожидание просто неверно: предполагается, что он переместится на тот же день в следующем месяце, если таковой существует. В любом случае, как код может узнать, что вы хотите, чтобы 28 февраля означало «последний день февраля»? На законных основаниях это означает «28 февраля». Предположим, вы начали с 28 января, затем добавили месяц, затем добавили еще один, какой результат вы ожидаете?

То, что вам нужно, может быть достигнуто, работая с 1 числа следующего месяца, а затем перемещаясь на один день назад.

person Marko Topolnik    schedule 30.05.2013
comment
Если дата начинается с 28 января, она должна заканчиваться 28 февраля, тогда следующий месяц будет 28 марта. Но если дата начинается с 31 января, следующий месяц должен быть 28 февраля, а затем 31 марта. Возможно ли это? - person John; 30.05.2013
comment
Логика, которую вы предлагаете, должна быть функцией полной истории состояний объекта. Это также будет очень специфично для ваших пожеланий. Естественно, ни одна публичная библиотека для этого не подходит. - person Marko Topolnik; 30.05.2013