最近做系统,用户需求按月统计,但月非自然月,是自定义的:上个月月最后一周周二,到本月最后一周周二算一个月。所以做了一个通用类,根据时间段,采用笨方法~~算出该时间段范围内的每个月最后一周周二具体的日期。
/**
* 根据时间段,求出时间段范围内的每月最后一周 周二
* @param beginmonth
* @param endmonth
* @return
* @throws Exception
* @author Juannyoh
* @date 2014-7-14下午04:41:49
*/
public List<HashMap<String,Object>> getGroupMonth(String beginmonth,String endmonth) throws Exception{
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
DateFormat df = new SimpleDateFormat("yyyyMMdd");
String today=df.format(date);
if((beginmonth==null||beginmonth.equals(""))&&(endmonth==null||endmonth.equals(""))){
beginmonth="20131231";
endmonth=today;
}
else if(beginmonth==null||beginmonth.equals("")){
beginmonth="20131231";
}
else if(endmonth==null||endmonth.equals("")){
endmonth=today;
}
List<HashMap<String,Object>> monthlist=new ArrayList<HashMap<String,Object>>();
int beginyear=Integer.parseInt(beginmonth.substring(0,4));
int beginmon=Integer.parseInt(beginmonth.substring(4,6));
int endyear=Integer.parseInt(endmonth.substring(0,4));
int endmon=Integer.parseInt(endmonth.substring(4,6));
String newdate="";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
for(int year=beginyear;year<=endyear;year++){
for(int month=1;month<=12;month++){
newdate=year+"-"+month;
Date date1 = dateFormat.parse(newdate);
calendar.setTime(date1);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//System.out.println(date+" 月 days:" + days);
Date date2 = dateFormat1.parse(newdate + "-" + days);
calendar.clear();
calendar.setTime(date2);
int k = new Integer(calendar.get(Calendar.DAY_OF_WEEK));//星期二
if(k>=3){
String newday=days-(k-3)+"";
date2=dateFormat1.parse(newdate + "-" + newday);
calendar.clear();
calendar.setTime(date2);
//System.out.println(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
}
else{
String newday=days-7+(3-k)+"";
date2=dateFormat1.parse(newdate + "-" + newday);
calendar.clear();
calendar.setTime(date2);
//System.out.println(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
}
//只保存需要的月份日期
if(year==beginyear&&year!=endyear){
if(month>=beginmon&&month<=12){
HashMap<String,Object> daymap=new HashMap<String,Object>();
daymap.put("seardays", calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
monthlist.add(daymap);
}
}
else if(year>beginyear&&year<endyear){
HashMap<String,Object> daymap=new HashMap<String,Object>();
daymap.put("seardays", calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
monthlist.add(daymap);
}
else if(year==endyear&&year!=beginyear){
if(month>=1&&month<=endmon){
HashMap<String,Object> daymap=new HashMap<String,Object>();
daymap.put("seardays", calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
monthlist.add(daymap);
}
}
else if(year==beginyear&&year==endyear){
if(month>=beginmon&&month<=endmon){
HashMap<String,Object> daymap=new HashMap<String,Object>();
daymap.put("seardays", calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-"+ calendar.get(Calendar.DAY_OF_MONTH));
monthlist.add(daymap);
}
}
}
}
return monthlist;
}