package Test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.junit.Test;
/**
* 根据一段时间区间,按月份拆分成多个时间段
* @author wjl
*
*
*/
public class SplitDateUtil {
/*
* 测试数据
* "2017/8/2","2017/8/2" √
* "2017/8/2","2017/8/20" ×
* "2017/8/2","2018/8/31" √
* "2017/8/2","2017/8/31" √
* "2017/8/2","2018/4/20" √
* "2017/8/22","2018/4/10" √
*/
@Test
public void demo(){
SplitDateUtil.getKeyValueForDate("2017/8/2","2017/8/2");
System.out.println("-------------------");
SplitDateUtil.getKeyValueForDate("2017/8/2","2017/8/20");
System.out.println("-------------------");
SplitDateUtil.getKeyValueForDate("2017/8/2","2018/8/31");
System.out.println("-------------------");
SplitDateUtil.getKeyValueForDate("2017/8/2","2018/4/20");
System.out.println("-------------------");
SplitDateUtil.getKeyValueForDate("2017/8/22","2018/4/10");
System.out.println("-------------------");
SplitDateUtil.getKeyValueForDate("2017/8/22","2016/4/10");
}
/**
* 根据一段时间区间,按月份拆分成多个时间段
* @param startDate 开始日期
* @param endDate 结束日期
* @return
*/
public static List<KeyValueForDate> getKeyValueForDate(String startDate,String endDate) {
List<KeyValueForDate> list = null;
try {
list = new ArrayList<KeyValueForDate>();
// 定义起始日期
Date d1 = new SimpleDateFormat("yyyy/MM/dd").parse(startDate);
// 定义结束日期
Date d2 = new SimpleDateFormat("yyyy/MM/dd").parse(endDate);
// 获取Calendar
Calendar calendar = Calendar.getInstance();
// 设置时间
calendar.setTime(d1);
// 设置日期为最大日期
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date d3 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime()));
//System.out.println(sdf.format(d3));
Date temp1 = d1;
Date temp2 = d3;
//结束日期小于开始日期
if(d2.before(d1)){
System.out.println("请输入正确的结束日期!");
return null;
}
//结束日期大于开始日期
while (temp2.before(d2)) {
System.out.println(sdf.format(temp1)+"--------"+sdf.format(temp2));
//获取下一个月第一天
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DAY_OF_MONTH,1);
temp1 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime())) ;
//获取下一个月份的最后一天
calendar.setTime(temp1);
calendar.add(Calendar.MONTH, 0);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
temp2 = new SimpleDateFormat("yyyy/MM/dd").parse(sdf.format(calendar.getTime())) ;
}
System.out.println(sdf.format(temp1)+"--------"+sdf.format(d2));
} catch (Exception e) {
return null;
}
return null;
}
}
class KeyValueForDate{
private String startDate;
private String endDate;
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
}