public static void main(String[] args) throws ParseException
{
// 格式化初始日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startdate = sdf.parse("2018-05-18");
Date enddate = sdf.parse("2018-12-09");
Calendar begindate = Calendar.getInstance();
Calendar finishdate = Calendar.getInstance();
begindate.setTime(startdate);
finishdate.setTime(enddate);
finishdate.add(Calendar.DAY_OF_MONTH, 1);
int daysMonth = 0;
// 获取两个日期对应的单独年,月,日
int syear = finishdate.get(Calendar.YEAR);
int smon = finishdate.get(Calendar.MONTH) + 1;
int sday = finishdate.get(Calendar.DAY_OF_MONTH);
int eyear = begindate.get(Calendar.YEAR);
int emon = begindate.get(Calendar.MONTH) + 1;
int eday = begindate.get(Calendar.DAY_OF_MONTH);
int day = 0;
int mon = 0;
int year = 0;
// 获取结束日期上个月所在月共多少天
finishdate.add(Calendar.MONTH, -1);
Calendar c = new GregorianCalendar(finishdate.get(Calendar.YEAR), (finishdate.get(Calendar.MONTH) + 1) - 1, 1);
daysMonth = c.getActualMaximum(5);
// 相差年,月,日计算
day = daysMonth + sday - eday;
smon = smon - 1;
if (day >= daysMonth)
{
day = day - daysMonth;
smon = smon + 1;
}
if (smon - emon < 0)
{
syear = syear - 1;
mon = 12 + smon - emon;
}
else
{
mon = smon - emon;
}
year = syear - eyear;
String date = "";
date = date + year + "年";
date = date + mon + "月";
date = date + day + "日";
System.out.println(date);
}