Java日期月份差异

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

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

例如

  • 自日期:2009-01-29
  • 迄今为止:2009-02-02
  • 它有一个日期和一个2月的日期。

    它应该返回2。


    正如其余的人所说,如果有一个图书馆会在几个月内给你时间差异,并且你可以使用它,那么你也可以。

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

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

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

    无论月份是在1月= 0还是1月= 1的情况下进行的,无论是年份是AD还是自1900年以来的年份,或者其他什么都没有关系,只要两个日期使用相同的基础。 因此,例如,不要混合AD和BC日期,因为没有第0年,因此BC从AD抵消了1。

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


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

    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查看我的替代答案。


    我强烈建议这个Joda-Time。

  • 它使这类工作非常简单(查看期间)
  • 它不会受到困扰当前日期/时间对象的线程问题的困扰(特别是我在考虑格式化程序)
  • 它是Java 7中新的Java日期/时间API的基础(因此您正在学习将成为标准的东西)
  • 请注意Nick Holt的评论如下。 夏令时改变。

    链接地址: http://www.djcxy.com/p/60613.html

    上一篇: Java Date month difference

    下一篇: Win2008 R2 WER ( error reporting ) LocalDumps blocked by what?