繁体   English   中英

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

[英]how to find the total number of months between the two dates including extra days?

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

例:

开始日期:01/01/2014

结束日期: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中获得这个?

为了能够说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但这仍然不是完美的,因为leap年有366天。

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

这是我自己的答案,是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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM