【问题标题】:Get difference between two dates in months using Java [duplicate]使用Java获取月份中两个日期之间的差异[重复]
【发布时间】:2013-05-09 15:53:08
【问题描述】:

我需要使用 Java 获取两个日期之间的差异。我需要我的结果在几个月内。

例子:

开始日期 = 2013-04-03 结束日期 = 2013-05-03 结果应该是 1

如果间隔是

开始日期 = 2013-04-03 结束日期 = 2014-04-03 结果应该是 12

使用以下代码,我可以在几天内得到结果。我怎样才能在几个月内获得?

Date startDate = new Date(2013,2,2);
Date endDate = new Date(2013,3,2);
int difInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000*60*60*24));

【问题讨论】:

  • 你可以使用外部库,比如 JodaTime 吗?
  • 如果你使用 JodaTime 那么这里有一个简单的答案类似的问题:stackoverflow.com/questions/6844061/…
  • 您在 2013-01-31 和 2013-02-01 之间想要什么? 0 个月还是 1 个月?
  • 在这种情况下,我真的不想计算天数。我只想要精确的月差

标签: java date


【解决方案1】:

如果您不能使用 JodaTime,您可以执行以下操作:

Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startDate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(endDate);

int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR);
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH);

请注意,如果您的日期是 2013 年 1 月 31 日和 2013 年 2 月 01 日,那么您可以通过这种方式获得 1 个月的距离,这可能是您想要的,也可能不是。

【讨论】:

  • +1 这适用于每年的差异。 (即)Startdate = 2014-04-03 enddate = 2013-04-03 Result should be 12 正如 OP 所说。 更新 是的,即使只有 1 天的差异,他也会得到 1 个月的差异,但 OP 指定他希望在几个月内获得。 1 个月不是这些日期之间的真正差异,但 0 并不是更实际的差异。为此,如果您想要 0 个月,您可以执行 Math.floor 之类的操作。
  • @Etienne Miret:我收到以下错误。类型的方法 startCalendar(int) 未定义
  • @ashu startCalendar(int) 不是一种方法。也许你的语法有错误。你必须做startCalendar.setTime(int)。在这种情况下,intstartDate.getTime()。所以你需要在你的代码中有这个startCalendar.setTime(startDate.getTime())
  • 是的,但是完全按照上面给出的方式编写代码,但仍然出现这样的错误
  • 对不起,我在那里犯了一个语法错误
【解决方案2】:

您可以使用 Java 的 Joda 时间库。用它计算日期之间的时间差异会容易得多。

时间差异的示例 sn-p:

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

【讨论】:

  • 仅供参考,Joda-Time 项目现在处于维护模式,其团队建议迁移到 java.time 类。
【解决方案3】:

你可以试试这个:

Calendar sDate = Calendar.getInstance();
Calendar eDate = Calendar.getInstance();
sDate.setTime(startDate.getTime());
eDate.setTime(endDate.getTime());
int difInMonths = sDate.get(Calendar.MONTH) - eDate.get(Calendar.MONTH);

我认为这应该可行。我为我的项目使用了类似的东西,它适用于我需要的东西(年份差异)。您从 Date 获得 Calendar 并获得当月的差异。

【讨论】:

  • 如果两个日期属于不同年份则不起作用。
  • @EtienneMiret 这是真的。这仅适用于同一年的日期。
  • 我建议删除这个答案,因为它没有正确实施,目前已过时。
  • @AlexRudenko 如果您要抱怨一个 7 岁的答案,那么您有一个严重的问题。大声笑。
  • 无论我有没有问题都不能改善这个答案,这与木桶成熟的白兰地不太一样,因此这 7 年来它并没有变得更好:)
猜你喜欢
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多