获取时间差(一)--年份、月份
public static int getYearsByTwoDates(Date date1,Date date2){ Calendar date1Ca = Calendar.getInstance(); date1Ca.setTime(date1); Calendar date2Ca = Calendar.getInstance(); date2Ca.setTime(date2); if(date2Ca.getTimeInMillis() < date1Ca.getTimeInMillis()) return -1; int beginYear = date1Ca.get(Calendar.YEAR); int endYear = date2Ca.get(Calendar.YEAR); int beginMonth = date1Ca.get(Calendar.MONTH)+1; int endMonth = date2Ca.get(Calendar.MONTH)+1; int beginDay = date1Ca.get(Calendar.DAY_OF_MONTH); int endDay = date2Ca.get(Calendar.DAY_OF_MONTH); int yearInterval = endYear - beginYear; if(endMonth < beginMonth){ yearInterval--; } boolean beginBool = DateUtil.isMonthEnd(beginYear,beginMonth,beginDay); boolean endBool = DateUtil.isMonthEnd(endYear,endMonth,endDay); if(endMonth == beginMonth){ if(beginBool && endBool){ return yearInterval; }else if(!beginBool && endBool && endDay <= beginDay){ return yearInterval; }else if(!beginBool && !endBool && endDay == beginDay){ return yearInterval; }else{ return -1; } }else{ return -1; } }
public static int getMonthsByTwoDates(Date date1,Date date2){ Calendar date1Ca = Calendar.getInstance(); date1Ca.setTime(date1); Calendar date2Ca = Calendar.getInstance(); date2Ca.setTime(date2); if(date2Ca.getTimeInMillis() < date1Ca.getTimeInMillis()) return -1; int beginYear = date1Ca.get(Calendar.YEAR); int endYear = date2Ca.get(Calendar.YEAR); int beginMonth = date1Ca.get(Calendar.MONTH)+1; int endMonth = date2Ca.get(Calendar.MONTH)+1; int beginDay = date1Ca.get(Calendar.DAY_OF_MONTH); int endDay = date2Ca.get(Calendar.DAY_OF_MONTH); boolean beginBool = DateUtil.isMonthEnd(beginYear,beginMonth,beginDay); boolean endBool = DateUtil.isMonthEnd(endYear,endMonth,endDay); // 获取年的差值 假设 d2 = 2012-4-30 d1 = 2012-3-31 int yearInterval = endYear - beginYear; // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 if(yearInterval == 0 || yearInterval ==1){ if(endMonth < beginMonth || endMonth == beginMonth && ((endDay < beginDay) && (!beginBool || !endBool))) yearInterval --; // 获取月数差值 int monthInterval = (endMonth + 12) - beginMonth ; if(endDay < beginDay && (!beginBool && !endBool)) monthInterval --; monthInterval %= 12; int month = yearInterval * 12 + monthInterval; if(beginBool && endBool){ return month; }else if(!beginBool && endBool && endDay <= beginDay){ return month; }else if(!beginBool && !endBool && endDay == beginDay){ return month; }else{ return -1; } } return -1; }
获取时间差(二)
public static int getYearsByTwoDates2(Date date1,Date date2){ Calendar date1Ca = Calendar.getInstance(); date1Ca.setTime(date1); Calendar date2Ca = Calendar.getInstance(); date2Ca.setTime(date2); date1Ca.add(Calendar.MONTH, 12); if(date2Ca.getTime().getTime() >= date1Ca.getTime().getTime()){ return 1; }else{ return -1; } }
判断当前日是否是当月最后一天方法
public static boolean isMonthEnd(int year,int month,int day) { switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: if (day == 31) { return true; } return false; case 4: case 6: case 9: case 11: if (day == 30) { return true; } return false; case 2: if (isLeapYear(year) && day == 29) { return true; } else if (!isLeapYear(year) && day == 28) { return true; } return false; default: return false; } } //判断是否是闰年 public static boolean isLeapYear(int year) { if(year%4 ==0 || year%400 ==0){ return true; }else{ return false; } }