Joda Time - разница в «полных» месяцах между двумя датами - PullRequest
0 голосов
/ 07 сентября 2018

Как рассчитать количество «полных» месяцев между двумя датами с временем йода, отбрасывая неполные месяцы? Например, у меня есть 2 даты

LocalDate from = new LocalDate (2018, 9, 10);
LocalDate to = new LocalDate (2018, 11, 15);

Между этими датами существует один «полный» месяц - октябрь с 1 по 31. Поэтому я хочу получить это число «1», отбрасывая «неполные» месяцы - сентябрь и ноябрь

Мне нужно что-то вроде этого

System.out.println(Months.monthsBetween(from, to).getMonths()); // returns 2
System.out.println(Months.**completed**MonthsBetween(from, to).getMonths()); // returns 1

UPD 1. Я мог бы добиться того, что я хочу, следующим образом:

LocalDate from = new LocalDate (2018, 9, 10);
LocalDate to = new LocalDate (2018, 11, 15);

if (to.getDayOfMonth() != 1)
    from = from.plusMonths(1).withDayOfMonth(1);
if (to.getDayOfMonth() != 1)
    to = to.withDayOfMonth(1);

System.out.println(Months.monthsBetween(from, to).getMonths());

но, может быть, есть метод "из коробки"?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Joda Time предоставляет методы для извлечения days, months и years между двумя датами. Создайте два экземпляра вашей даты.

DateTime startDate = DateTime.parse("1970-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"))
DateTime endDate = DateTime.parse("2015-02-25", DateTimeFormat.forPattern("yyyy-MM-dd"))

Вы также можете создавать свои экземпляры даты в LocalDate вместо DateTime.

Теперь полные месяцы между двумя указанными датами можно легко найти,

int months = Months.monthsBetween(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1)).getMonths()

Для дней,

int days = Days.daysBetween(startDate, endDate).getDays()

Разница между двумя датами в месяцах

В течение многих лет

int years = Years.yearsBetween(startDate, endDate).getYears();
0 голосов
/ 07 сентября 2018

Не означает ли это, что вы просто хотите удалить один месяц из каждого интервала и сделать разницу между ними?

    LocalDate fromMinusOne = from.minus(Months.ONE);
    LocalDate toMinusOne = to.minus(Months.ONE);

    System.out.println(Months.monthsBetween(fromMinusOne, toMinusOne).getMonths());
...