Java 日期月份差异

2022-09-01 01:10:59

我有开始日期和结束日期。

我需要Java中这两个日期之间的月数。

例如

  • 开始日期: 2009-01-29
  • 日期: 2009-02-02

它有一个 jan 日期和一个 Feb 日期。

它应该返回 2。


答案 1

正如其他人所说,如果有一个库可以在几个月内给你时差,你可以使用它,那么你也可以。

否则,如果 和 是第一个日期的年份和月份,并且是第二个日期的年份和月份,则所需的值为:y1m1y2m2

(y2 - y1) * 12 + (m2 - m1) + 1;

请注意,中间项 (m2 - m1) 可能是负数,即使第二个日期在第一个日期之后,但没关系。

无论月份是1月=0还是1月=1并不重要,年份是公元年,1900年以来的年份还是其他什么都无关紧要,只要两个日期都使用相同的基础。例如,不要混合使用 AD 和 BC 日期,因为没有年份 0,因此 BC 从 AD 偏移 1。

如果日期以合适的形式提供给您,或者使用日历,您将获得等。y1


答案 2

除了使用Joda时间,这似乎是我最喜欢的建议,我会提供以下片段:

public static final int getMonthsDifference(Date date1, Date date2) {
    int m1 = date1.getYear() * 12 + date1.getMonth();
    int m2 = date2.getYear() * 12 + date2.getMonth();
    return m2 - m1 + 1;
}

编辑:从Java 8开始,有一种更标准的方式来计算相同的差异。请参阅我使用JSR-310 api的替代答案。