根据时间段,求出时间段范围内的每月最后一周 周二
来源:互联网 发布:编辑录音的软件 编辑:程序博客网 时间: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;
}
- 根据时间段,求出时间段范围内的每月最后一周 周二
- js根据当前时间获取指定范围内的时间段日期
- 根据时间段,返回时间段的工作小时数
- .net 获取上一周的时间段
- js根据开始时间和结束时间获取该时间段内的每天、每周一、每月、每年
- 时间段
- 求两个时间段的差在设定的范围内
- mysql 根据时间段统计
- 安卓判断是否在两个时间段的范围内
- MYSQL最近一周一个月时间段的查询语句
- oracle 查询某一时间段内每个月的最后一天
- 根据时间段生成趋势数据
- 根据时间段去做查询条件
- JAVA 根据时间段取数据
- 根据时间提取介于某个时间段的信息
- Oracle如何根据一个时间段内的所有日期
- shell脚本产生指定时间段内的每月开始时间和结束时间
- sql 时间段的提取
- java HashMap用自定义类做key(二)
- Uva 1335 Beijing Guards 解题报告(策略+二分)
- hdu 2717 Catch That Cow(bfs)
- 【深入Java虚拟机】之三:类初始化
- uva10759 手算多项式分解 或者dp
- 根据时间段,求出时间段范围内的每月最后一周 周二
- uva 299(排序、检索)
- 9 HashSet HashCode 迭代器 TreeSet Colletions类 HashMap
- struts2 简介
- Android 自定义圆圈进度并显示百分比例控件(纯代码实现)
- Svn 安装心得
- Oil Deposits 油田,深搜 http://vjudge.net/contest/view.action?cid=49515#problem/G
- IE 浏览器新奇技巧28则
- 简单的程序日志打印函数WriteLog,适用于vc等,含宽字符。