简体   繁体   中英

Joda Time - difference in “complete” months between two dates

How to calculate the number of "full" months between two dates with joda time, dropping incomplete months? For example, I have 2 dates

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

Between these dates there is one "full" month - October from 1 to 31. So I want to get is the number "1" by dropping the "incomplete" months - September and November

I need something like this

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

UPD 1. I could achieve what I want as follows:

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

but maybe there is an out of the box method?

Wouldn't this means that you simply want to remove one month from each interval and do a difference between them?

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

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

Joda Time provides methods to extract days , months and years between two dates. Create two instances of you date.

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

You can create your date instances in LocalDate as well instead of DateTime .

Now, complete months between above two dates can be found easily with,

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

For days,

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

Difference between two dates in months

For years,

int years = Years.yearsBetween(startDate, endDate).getYears();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM