/**
* 按月份拆分
*
* @param startTime 开始时间
* @param endTime 结束时间
* @param intervalDay 指定日
* @return
* @author Shi Zezhu
* @date 2017年8月2日 下午3:56:05
*/
public static List<Timestamp> splitMonth(Timestamp startTime, Timestamp endTime, Integer intervalDay) {
List<Timestamp> list = new ArrayList<Timestamp>();
if (startTime == null || endTime == null) {
return list;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(startTime);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(endTime);
Calendar nextCalendar = Calendar.getInstance();
nextCalendar.set(startCalendar.get(Calendar.YEAR), startCalendar.get(Calendar.MONTH), startCalendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
nextCalendar.set(Calendar.MILLISECOND, 0);
list.add(startTime);
while (intervalDay != null) {
if (intervalDay < 1) {
intervalDay = 1;
}
if (intervalDay == 1) {
nextCalendar.add(Calendar.MONTH, 1);
}
nextCalendar.set(Calendar.DAY_OF_MONTH, nextCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) > intervalDay ? intervalDay - 1 : nextCalendar.getActualMaximum(Calendar.DAY_OF_MONTH) - 1);
if (nextCalendar.compareTo(endCalendar) != -1) {
break;
}
if (startCalendar.before(nextCalendar)) {
startCalendar.setTime(nextCalendar.getTime());
list.add(new Timestamp(startCalendar.getTimeInMillis()));
startCalendar.add(Calendar.SECOND, 1);
list.add(new Timestamp(startCalendar.getTimeInMillis()));
}
nextCalendar.add(Calendar.MONTH, 1);
}
list.add(endTime);
return list;
}
/**
* 按月份拆分
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return
* @author Shi Zezhu
* @date 2017年8月2日 下午3:56:05
*/
public static List<Timestamp> splitMonth(Timestamp startTime, Timestamp endTime) {
return splitMonth(startTime, endTime, null);
}
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Timestamp startTime = new Timestamp(sdf.parse("2016-12-1 15:30:26").getTime());
Timestamp endTime = new Timestamp(sdf.parse("2017-3-18 18:30:26").getTime());
List<Timestamp> list = splitMonth(startTime, endTime, 31);
for (Timestamp t : list) {
System.out.println(sdf.format(t));
}
}
输出:
2016-12-01 15:30:26
2016-12-30 23:59:59
2016-12-31 00:00:00
2017-01-30 23:59:59
2017-01-31 00:00:00
2017-02-27 23:59:59
2017-02-28 00:00:00
2017-03-18 18:30:26
使用:
for (int i = 0; i < splitTime.size();) {
Timestamp startTimeSub = splitTime.get(i++);
Timestamp endTimeSub = splitTime.get(i++);
................
}