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();

Вы всегда можете использовать этот номер для обратной связи с вашим кодом и получения различных значений, соответствующих вашим требованиям.

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