Joda-Time: Расчет даты
Я хотел бы точно рассчитать месяцы между двумя датами, чтобы добиться этого, я делаю что-то вроде:
DateTimeZone ZONE = DateTimeZone.forID("Europe/London");
String DATE_FORMAT = "dd/MM/yyyy";
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT).withZone(ZONE);
LocalDate dateTime = FORMATTER.parseLocalDate("28/05/2013");
LocalDate dateTime6MonthAfter = FORMATTER.parseLocalDate("28/02/2014");
Period todayUntilEndOfContract = new Period(dateTime,dateTime6MonthAfter);
todayUntilEndOfContract.getMonths() +"M/"+ todayUntilEndOfContract.getWeeks() +"W/"+ todayUntilEndOfContract.getDays() +"D/");
Так что это даст мне ровно 9 месяцев между 28.05.2013 и 28.02.2014 НО!!! когда я вычисляю даты (29, 30, 31)/05/2013 с 28/02/2014, это всегда дает мне 9 месяцев, обычно должно быть 8M/3W/(6,5,4)D/ почему всегда 9M/0W/0D пожалуйста...?
большое спасибо
1 ответ
Ваша проблема в том, что вы ожидаете чего-то немного отличного от того, что предоставляется. Если я задам вам вопрос "что такое 30 января плюс один месяц?" тогда есть ряд разных ответов, которые действительны при разных допущениях. В случае с Йодой ответ - "28 февраля" (или 29-е, если високосный год).
Хотя вы запрашиваете информацию за месяц, я бы посоветовал вам получить количество дней вместо этого и использовать его в качестве основы, поскольку оно, вероятно, ближе к тому, что вам нужно:
int days = Days.daysBetween(dateTime, dateTime6MonthAfter).getDays();
Вы всегда можете использовать этот номер для обратной связи с вашим кодом и получения различных значений, соответствующих вашим требованиям.