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

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

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

  1. c语言程序找出500以内的所有素数,c语言求出给定范围内的所有质数

    程序功能: 输入一个整数,要求打印出这个整数以内的所有质数. 程序示例: #include #include #include bool IsPrime(int x) { bool bResult = ...

  2. 【刷题】求出一定范围内的素数

    什么是素数? "素数"又称作"质素",是指大于1的自然数,除了1与其自身外,不能被其它自然数整除的数,被称为素数(质素). 如何求出n以内的素数? 这里总结出两 ...

  3. 利用包含排斥原理求出给定范围内素数个数的问题

    一.前提 今天上离散数学课上看到一个题目:使用包含排斥原理求不超过120的素数个数,其实按照一般算法是这样的: count = 0 l = [] for x in range(121):#判断如果x是 ...

  4. c语言求20以内的质数,c语言求出给定范围内的所有质数

    程序功能: 输入一个整数,要求打印出这个整数以内的所有质数. 程序示例: #include #include #include bool IsPrime(int x) { bool bResult = ...

  5. SQL:求筛选时间段内每天各分组的聚合数据

    任务场景: 报表需求,必须由SQL处理完成,页面筛选条件为日期段,需要将所选日期按照每日区分,查出所有组别在每日的进线量.接通量.呼损量.接听率.进线占比.好评率. 进线量为线路全部进线量,接通量为s ...

  6. 平面内有N个点,如何快速求出距离最近的点对?

    大家好,我们今天来看一道非常非常经典的算法题--最近点对问题. 这个问题经常在各种面试当中出现,难度不低,很少有人能答上来.说实话,我也被问过,因为毫无准备,所以也没有答上来.是的,这道题有点神奇,没 ...

  7. java 时间段求并集,java集合操作-----求两个集合的交集和并集

    2019独角兽企业重金招聘Python工程师标准>>> java求两个集合的交集和并集 java如何求两个集合的交集和并集呢??其实java的API中已经封装了方法.今天写个简单的例 ...

  8. HQL:求出每个商品的打折天数

    HQL:求出每个商品的打折天数 问题描述: 每个商品可能有多个打折活动,而打折活动的时间段可能会有重叠,求出商品实际参与打折的天数. 商品打折数据: id stt edt 1 2021-06-01 2 ...

  9. 7_2判断两个单链表是否相交,若相交,求出第一个交点

    转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4251372.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己 ...

最新文章

  1. 【网络安全】如何使用QueenSono从ICMP提取数据
  2. 浅谈对Ubuntu桌面系统的实验性理解
  3. oracle之基本的sql_select语句之课后练习
  4. C++ Vector(向量容器)
  5. 转:ArcGIS提取面状道路中心线(转载)
  6. 全连接神经网络_【模型解读】从“局部连接”回到“全连接”的Non-Local神经网络...
  7. Iphone如何应对华为鸿蒙系统,鸿蒙2.0向iOS看齐 系统解决了 芯片怎么办?
  8. windows curl ssl版本编译
  9. [源码]天骄天下个人网站系统(三个月倾情打造)
  10. robots.txt详解
  11. 计算机网络第七版 部分详细答案
  12. html 播放ogg,HTML5中video 和 ogg
  13. React中使用worker线程
  14. Python零基础速成班-第3讲-Python基础(中),list数组、tuple元组、dict字典、set集合
  15. element-ui表格的滚动条样式修改(当固定table表格高度时默认滚动条样式太丑)
  16. 图章制作软件测试自学,SecSeal安全电子印章系统内部测试大纲.doc
  17. 爬虫学习笔记(三)——利用JSON爬取豆瓣热映的使用
  18. Hibernate save()与persist()区别
  19. TensorFlow学习——入门篇
  20. 实验三 软件工程结对项目

热门文章

  1. 程序员可以为钱工作,但别为钱卖命
  2. 想不通的时候读一遍-永远都不要做的事
  3. java实现阿里云短信验证注册--详细教程
  4. 负一屏服务端实现,精简demo源码供查阅
  5. 【电气专业知识问答】问:如何分析、判断与处理电流互感器二次回路开路的故障?
  6. 体验云计算的成果----亚马逊免费云计算服务
  7. 关于计算机互联网的英语小报图片,关于简洁好看的英语手抄报图片
  8. ❤️十万字Linux命令大全cp详细教程(2)❤️
  9. mac上怎么卸载office应用程序
  10. html侧边导航栏跟随页面滚动,页面滚动时,右侧导航栏跟着对应滚动