使用JodaTime计算保持年份的两个日期之间的月份

时间:2013-10-30 08:56:42

标签: java jodatime

我使用此代码计算输入pastdate和currentdate之间的月数。它使用JodaTime

LocalDate date1 = new LocalDate(installmentStartDate2);
        LocalDate date2 = new LocalDate(new java.util.Date());
        PeriodType monthDay = PeriodType.yearMonthDayTime();
        Period difference = new Period(date1, date2, monthDay);
        int months = difference.getMonths();
        return months + 1; 

现在,当我进入2013年1月1日,我得到10作为答案。但即使我在2012年1月1日进入,问题仍然是10。

这意味着在计算时它不考虑年份。

我可以做些什么来得到正确的答案,即当我进入2012年1月1日时,22。

JodaTime能做到吗?如是 ?怎么样 ? 如果不 ?还有其他方法吗?

4 个答案:

答案 0 :(得分:19)

你要求年,月和日的差异 - 所以你要回来1年,10个月和29天。

只需使用:

int months = Months.monthsBetween(date1, date2).getMonths();

或者,如果您真的想使用new Period,也许还可以使用日期:

PeriodType monthDay = PeriodType.yearMonthDayTime().withYearsRemoved();
Period difference = new Period(date1, date2, monthDay);

您可以使用PeriodType.months(),但如果您真的只对这几个月感兴趣,我会使用上面的第一个片段在一个简短的声明中完成所有操作。

答案 1 :(得分:3)

您的代码几乎是正确的。

您可以更改:

PeriodType monthDay = PeriodType.yearMonthDayTime();

到:

PeriodType monthDay = PeriodType.months();

它也可以。

答案 2 :(得分:1)

Joda时间是处理这个问题的好方法

创建一个joda时间日期对象

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

两个日期之间的差异

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

两个月的日期差异

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

两年中两个日期的差异

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

答案 3 :(得分:0)

我建议使用这个:

ChronoUnit.MONTHS.between(earlierDate,date)