/**
* 判断是否闰年
* @param year 年份
* @return true表示闰年
*/
public static boolean bissextile(int year){
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
return true;
}else{
return false;
}
}
/**
* 计算startDate 与endDate之间是否存在多少个2月29日
* @param startDate
* @param endDate
* @return
*/
public static int countDayOf29(Date startDate, Date endDate){
int countDays = 0;
Calendar calendar = Calendar.getInstance();
calendar.setTime(startDate);
int startYear = calendar.getWeekYear();
calendar.setTime(endDate);
int endYear = calendar.getWeekYear();
// 超过一年
if (endYear - startYear > 1){
for (int i = startYear+1; i<endYear; i++){
if (bissextile(i)){
countDays++;
}
}
//判断开始年份是否存在2月29
if (bissextile(startYear)){
calendar.set(Calendar.YEAR, startYear);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 29);
Date day29 = calendar.getTime();
if (startDate.before(day29)){
countDays++;
}
}
//判断结束年份是否包括2月29日
if (bissextile(endYear)){
calendar.set(Calendar.YEAR, endYear);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 29);
Date day29 = calendar.getTime();
if (endDate.after(day29)){
countDays++;
}
}
}
//开始日期闰年, 开始日期小于等于2月29日 并且结束日期大于2月29日
else if (bissextile(startYear)){
calendar.set(Calendar.YEAR, startYear);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 29);
Date day29 = calendar.getTime();
if (startDate.before(day29) && endDate.after(day29)){
return ++countDays;
}
}
else if (bissextile(endYear)){
calendar.set(Calendar.YEAR, endYear);
calendar.set(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, 29);
Date day29 = calendar.getTime();
if (startDate.before(day29) && endDate.after(day29)){
return ++countDays;
}
}
return countDays;
}