/**
* 生成工作日开始(周一)-结束(周五)日期对的方法
* 例如:
* 输入:参数start_time ="2011-05-04"(星期三),end_time="2011-07-14"(星期四)
* 返回:[
* ["2011-05-04","2011-05-06"],
* ["2011-05-09","2011-05-13"],
* ...,
* ["2011-07-4","2011-07-14"]
* ]
* 说明:返回的List中的第一个元素数组中,第1个值是开始日期,第2个值是开始日期后一个星期5
* List中的最后一个元素数组中,第1个值是结束日期前一个星期1,第2个值是结束日期
* List中间部分每一个元素数组中,第1个值是星期1,第2个值是星期5
* @param start_time
* @param end_time
* @return
*/
public List<String[]> getTimePairList(String start_time,String end_time){
List<String[]> list = new ArrayList<String[]>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date start_date = null;
Date end_date = null;
try {
start_date = sdf.parse(start_time);
end_date = sdf.parse(end_time);
int dayOfWeek1 = caculateWeekDays(start_date); //1->周日,2->周一
int dayOfWeek2 = caculateWeekDays(end_date);
int pre_days = 8 - dayOfWeek1; //i...saturday
int last_days = dayOfWeek2; //sunday...i
long diff_days = caculateDays(start_date,end_date);
int remain_weeks = (int)(diff_days+2-pre_days-(last_days+1))/7;
//计算第一个start、end对
addPair(list,start_date,null,pre_days-2);
//TODO添加
for(int i=0; i<remain_weeks; i++){
Date start_d = caculateDate(start_date, pre_days+i*7+1);
addPair(list,start_d,null,4);
}
//计算最后一个start、end对
addPair(list,null,end_date,-(last_days-2));
} catch (ParseException e) {
e.printStackTrace();
}
return list;
}
private void addPair(List<String[]> list, Date start_date, Date end_date, int days) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
String[] start_end_pair = new String[2];
if(start_date!=null && end_date==null){
c.setTime(start_date);
c.add(Calendar.DAY_OF_MONTH, days);
Date d = c.getTime();
start_end_pair[0] = sdf.format(start_date);
start_end_pair[1] = sdf.format(d);
}else if(start_date==null && end_date!=null){
c.setTime(end_date);
c.add(Calendar.DAY_OF_MONTH, days);
Date d = c.getTime();
start_end_pair[0] = sdf.format(d);
start_end_pair[1] = sdf.format(end_date);
}
list.add(start_end_pair);
}
public Date caculateDate(Date start_date, int days){
Calendar c = Calendar.getInstance();
c.setTime(start_date);
c.add(Calendar.DAY_OF_MONTH, days);
return c.getTime();
}
public int caculateWeekDays(Date date){
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.get(Calendar.DAY_OF_WEEK);
}
private int caculateDays(Date start_date, Date end_date){
return Math.round(end_date.getTime()/(1000*60*60*24)-start_date.getTime()/(1000*60*60*24));
}