根据时间段,求出时间段范围内的每月最后一周 周二

来源:互联网 发布:编辑录音的软件 编辑:程序博客网 时间:2024/05/18 09:17

最近做系统,用户需求按月统计,但月非自然月,是自定义的:上个月月最后一周周二,到本月最后一周周二算一个月。所以做了一个通用类,根据时间段,采用笨方法~~算出该时间段范围内的每个月最后一周周二具体的日期。

/**
* 根据时间段,求出时间段范围内的每月最后一周 周二
* @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;
}

0 0
原创粉丝点击