我使用此代码计算输入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能做到吗?如是 ?怎么样 ? 如果不 ?还有其他方法吗?
答案 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)