如何查找两个日期之间的总月数,包括额外的天数?

时间:2014-05-31 04:35:00

标签: java

我有一个要求,我需要找出两个日期之间的月份数,包括额外的天数。

示例:

开始日期:2014年1月1日

结束日期:2014年2月21日

LocalDate startDate = new LocalDate(startDate1);

LocalDate endDate = new LocalDate(endDate1);

PeriodType monthDay =PeriodType.yearMonthDay().withYearsRemoved();

Period difference = new Period(startDate, endDate, monthDay);

int months = difference.getMonths();

int days = difference.getDays()
我会得到的输出是:

  

月:1天:20

但我的要求是我希望获得包含额外一天的总月数。

喜欢:1.66个月。

如何在java中获取这个?

2 个答案:

答案 0 :(得分:1)

为了能够说1.66个月你需要定义一个月的时间。它并不总是一样的。如果您假设一个月是30天,那么您可以使用以下方法解决此问题:

Date startDate = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/2014");
Date endDate = new SimpleDateFormat("dd/MM/yyyy").parse("21/02/2014");
double result = (endDate.getTime() - startDate.getTime()) / (1000D*60*60*24*30);

这会给我们1.7,如果你除以31就得到1.6451612903225807

如果你想要更好(但不完美)近似一个月的时间,你可以尝试365/12,它会给你1.6767123287671233,但这仍然不完美,因为闰年​​有366天。

问题不在于公式,而在于问题定义。现实生活中没有人说“我将在1.66个月内到达那里”,没有人会要求你在几天内转换1.66 months

答案 1 :(得分:0)

这是我自己的答案,是cherouvim的一个变种

final Date startDate = new GregorianCalendar (2014, 0, 1).getTime ();
final Date endDate = new GregorianCalendar (2014, 1, 21).getTime ();
System.out.println ((endDate.getTime () - startDate.getTime ()) / (float) (1000L * 60 * 60 * 24 * 30));