6

我正在使用此代码来计算输入过去日期和当前日期之间的月份数。它使用 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

4 回答 4

20

你要的是年、月和日的差异——所以你得到了 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(),但如果您真的只对月份感兴趣,我会使用上面的第一个片段在一个简短的语句中完成所有操作。

于 2013-10-30T09:00:38.243 回答
3

您的代码几乎是正确的。

你可以改变 :

PeriodType monthDay = PeriodType.yearMonthDayTime();

至 :

PeriodType monthDay = PeriodType.months();

它也会起作用。

于 2013-10-30T09:10:42.320 回答
1

Joda time 是解决这个问题的好方法

创建一个 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();
于 2016-06-15T05:31:36.000 回答
0

我建议使用这个:

ChronoUnit.MONTHS.between(earlierDate,date)
于 2018-01-14T15:30:40.427 回答