【发布时间】:2014-11-20 03:45:18
【问题描述】:
抱歉,我尝试为剩余日期 Months 和 Days 编码,不幸的是我得到了错误的结果。任何帮助将不胜感激。谢谢!
SimpleDateFormat formatter= new SimpleDateFormat("dd-MM-yyyy");
String sdate = "08-02-2016";
String edate = "02-02-2017";
Date startdate = formatter.parse(sdate);
Date enddate = formatter.parse(eddate );
Calendar startCalendar = new GregorianCalendar();
startCalendar.setTime(startdate);
Calendar endCalendar = new GregorianCalendar();
endCalendar.setTime(enddate);
int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); //effdate - currdate
int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) -startCalendar.get(Calendar.MONTH);
int diffDay= endCalendar.get(Calendar.DAY_OF_MONTH) -startCalendar.get(Calendar.DAY_OF_MONTH);
预期结果:11 个月,25 天
P/s : JodaTime 不适用。
【问题讨论】:
-
您使用的是 Java 8 吗?尝试通过减法计算日期之间的差异从来都不是一个好主意,它没有考虑日期/时间的特殊性,这就是 JodaTime 存在的原因......
-
您只需要一些额外的逻辑来处理 CURDATE 的日期小于 EFFDATE 的日期的情况。其中哪一部分给您带来了困难?
-
是的,正如 MadProgrammer 所说,这在 Java 8 中很容易——您使用
Period.between( ... )传递几个LocalDate对象。那么你有 Java 8 吗? -
@MadProgrammer ,同意你的看法。因为使用减法方法不是一个好习惯。但我的 java 版本是