2013-05-15 47 views
27

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

实施例:

开始日期2013年4月3日= ENDDATE = 2013年5月3日 结果应该是1

如果间隔是

开始日期= 2013-04-03 enddate = 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)); 
+0

你可以使用外部库,比如JodaTime吗? – Keppil

+3

如果使用JodaTime那么,这是一个简单的答案类似的问题在这里:http://stackoverflow.com/questions/6844061/calculate-month-difference-in-joda-time – maba

+1

你想2013-01-之间是什么31和2013-02-01? 0个月还是1个月? –

回答

88

如果您不能使用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月1日,你会得到1个月的距离这样,这可能会或可能不是你想要的。

+0

+1这将适用于每年的差异。 (即)'Startdate = 2014-04-03 enddate = 2013-04-03正如OP所说,结果应该是12'。 **更新**是的,即使只有1天的差异,他也会得到1个月的差异,但是OP指定他需要几个月。 1个月它们在这些日期之间并不是真正的差异,但0它并不是真正的差异。为此,如果你想要0个月,你可以做一些像'Math.floor'或类似的东西。 – DaGLiMiOuX

+0

@ Etienne Miret:我收到以下错误。方法startCalendar(int)对于类型 – ashu

+1

未定义@ashu'startCalendar(int)'不是方法。也许,你的语法错误。你必须做'startCalendar.setTime(int)'。在这种情况下,'int'是'startDate.getTime()'。所以你需要在你的代码中使用'startCalendar.setTime(startDate。getTime())' – DaGLiMiOuX

4

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

时间-DIFF示例代码段:

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

仅供参考,Joda-Time项目现在处于维护模式,其团队建议迁移到java.time类。 –

-4

你可以试试这个:

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,只是得到月份的差异。

+10

如果这两个日期属于不同年份,则不起作用。 –

+0

@EtienneMiret确实如此。这将只适用于同一年的日期。 – DaGLiMiOuX