【发布时间】:2016-11-15 15:25:14
【问题描述】:
我想计算两个日期的月和天之间的差异,我不想考虑一个月是 30 天并以毫秒为单位获取时间并转换它们,我不想使用这样的库作为 Joda,我还找到了一个使用 LocalDate 的解决方案,但是我使用的是 Java 7。 我寻找我的问题的答案,但找不到任何答案,我尝试了很多方法,我尝试创建一个日历并以毫秒为单位传递我 2 个日期之间的差异,但如果我尝试获取 15/04 之间的差异15/5 我会得到 30 天而不是 1 个月,下面是代码
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, 2013);
c.set(Calendar.MONTH, Calendar.APRIL);
c.set(Calendar.DAY_OF_MONTH, 15);
Date startDate = c.getTime();
c.set(Calendar.YEAR, 2013);
c.set(Calendar.MONTH, Calendar.MAY);
c.set(Calendar.DAY_OF_MONTH, 15);
Date lastDate = c.getTime();
Calendar diffCal = Calendar.getInstance();
diffCal.setTimeInMillis(lastDate.getTime() - startDate.getTime());
int months = ((diffCal.get(Calendar.YEAR) - 1970) * 12) + diffCal.get(Calendar.MONTH);
int days = diffCal.get(Calendar.DAY_OF_MONTH) - 1;
System.out.println("month(s) = " + months); // month(s) = 0
System.out.println("day(s) = " + days); // day(s) = 30
我可以用什么来获得两个日期之间的月差和天数?
编辑:我写了下面的代码,似乎给了我想要的东西,可以使用吗
Date startDate = sdf.parse("31/05/2016");
Date endDate = sdf.parse("1/06/2016");
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.setTime(startDate);
endCalendar.setTime(endDate);
int months = 0, days = 0;
months += ((endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR)) * 12);
int startDays = startCalendar.get(Calendar.DAY_OF_MONTH);
int endDays = endCalendar.get(Calendar.DAY_OF_MONTH);
if(endDays >= startDays) {
months += (endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH));
days += (endDays - startDays);
} else {
months += (endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH) - 1);
days += ((startCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) - startDays) + endDays);
}
System.out.println("Difference");
System.out.println("Month(s): " + months);
System.out.println("Day(s): " + days);
【问题讨论】:
-
您可以尝试使用
Joda-Time库,它在日期方面非常有用 -
我知道你说你到处检查,但我的谷歌搜索的第一个结果提供了这个帖子:stackoverflow.com/questions/20165564/… 他们从日历中提取时间到日期对象并使用日期中的方法来获得差异以天为单位(检查第一个解决方案)。第二种解决方案:stackoverflow.com/questions/3796841/…
-
@DamCx 他不想使用 Joda。
-
@Babyburger 哎呀,对不起,读得太快了... :( 我的坏
-
继续在较早日期的月份上加 1,直到再加一个月会使您超过较晚的日期,计算您添加的月数;然后,继续在当天添加 1,直到再添加 1 会使您超过较晚的日期。
标签: java date calendar difference date-difference