我有一个要求,我需要找出两个日期之间的月份数,包括额外的天数。
示例:
开始日期: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中获取这个?
答案 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));