/**
* 获取起止日期之间每月/年的最后一天的日期集合
* @param minDate
* @param maxDate
* @param type
* @return
* @throws ParseException
*/
private static List<Date> getLastDateBetween(Date minDate, Date maxDate,String type) throws ParseException {
ArrayList<Date> result = new ArrayList<Date>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式化为年月
Calendar min = Calendar.getInstance();
Calendar max = Calendar.getInstance();
min.setTime(minDate);
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
max.setTime(maxDate);
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
Calendar curr = min;
if("month".equals(type)){
max.add(Calendar.MONTH, 1);
}else if("year".equals(type)){
max.add(Calendar.YEAR, 1);
}
while (curr.before(max)) {
if("month".equals(type)){
curr.set(Calendar.DATE, curr.getActualMaximum(Calendar.DATE));
result.add(curr.getTime());
curr.add(Calendar.MONTH, 1);
}else if("year".equals(type)){
curr.set(Calendar.DAY_OF_YEAR, curr.getActualMaximum(Calendar.DAY_OF_YEAR));
result.add(curr.getTime());
curr.add(Calendar.YEAR, 1);
}
}
return result;
}
/**
* 获取指定日期下个月/年的第一天
* @param date
* @param type
* @return
*/
public static Date getFirstDayOfNextMonthOrYear(Date date,String type){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if("month".equals(type)){
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.add(Calendar.MONTH, 1);
}else if("year".equals(type)){
calendar.set(Calendar.DAY_OF_YEAR, calendar.getActualMinimum(Calendar.DAY_OF_YEAR));
calendar.add(Calendar.YEAR, 1);
}
return calendar.getTime();
}