java8 日期范围内 日/周/月/季度/年 的日期结果集

/*** 根据时间范围列出所有日/周/月/季/年** @Author Moqi* @Date 2020/4/30* @Version V1.0**/
public class DateHorizonUtil {private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");private static SimpleDateFormat monthFormat = new SimpleDateFormat("yyyy-MM");/*** 根据时间范围获得月份集** @param beginDate:* @param endDate:* @return java.util.List<java.lang.String>* @author Moqi* @date 2020/4/30*/public static List<String> findMenth(Date beginDate, Date endDate) {/*      Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;如果业务数据存在相等的时候,而且相等时也需要做相应的业务判断或处理时,你需要使用:!Date1.after(Date2);*/List<String> rangeSet = new ArrayList<>();//定义日期实例Calendar dd = Calendar.getInstance();//设置日期起始时间dd.setTime(beginDate);//判断是否到结束日期while (!dd.getTime().after(endDate)) {rangeSet.add(monthFormat.format(dd.getTime()));//进行当前日期加1dd.add(Calendar.DATE, 1);}rangeSet = rangeSet.stream().distinct().collect(Collectors.toList());return rangeSet;}/*** 根据时间范围获得年集** @param beginDate:* @param endDate:* @return java.util.List<java.lang.String>* @author Moqi* @date 2020/4/30*/public static List<String> findYear(Date beginDate, Date endDate) {/*      Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;如果业务数据存在相等的时候,而且相等时也需要做相应的业务判断或处理时,你需要使用:!Date1.after(Date2);*/List<String> rangeSet = new ArrayList<>();//定义日期实例Calendar dd = Calendar.getInstance();//设置日期起始时间dd.setTime(beginDate);//判断是否到结束日期while (!dd.getTime().after(endDate)) {rangeSet.add(String.valueOf(dd.get(Calendar.YEAR)));//进行当前日期加1dd.add(Calendar.DATE, 1);}rangeSet = rangeSet.stream().distinct().collect(Collectors.toList());return rangeSet;}/*** 根据时间范围获得季度集** @param beginDate:* @param endDate:* @return java.util.List<java.lang.String>* @author Moqi* @date 2020/4/30*/public static List<String> findQuarter(Date beginDate, Date endDate) {/*      Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返回false;Date1.before(Date2),当Date1小于Date2时,返回TRUE,当大于等于时,返回false;如果业务数据存在相等的时候,而且相等时也需要做相应的业务判断或处理时,你需要使用:!Date1.after(Date2);*/List<String> rangeSet = new ArrayList<>();String[] numStr;String Q;//定义日期实例Calendar dd = Calendar.getInstance();//设置日期起始时间dd.setTime(beginDate);//判断是否到结束日期while (!dd.getTime().after(endDate)) {numStr = dateFormat.format(dd.getTime()).split("-", 0);Q = getQuarter(Integer.valueOf(numStr[1])) + "";rangeSet.add(dd.get(Calendar.YEAR) + "-" + Q);//进行当前日期加1dd.add(Calendar.DATE, 1);}rangeSet = rangeSet.stream().distinct().collect(Collectors.toList());return rangeSet;}/*** 根据月获得季度** @param month:* @return int* @author Moqi* @date 2020/4/30*/private static int getQuarter(int month) {if (month == 1 || month == 2 || month == 3) {return 1;} else if (month == 4 || month == 5 || month == 6) {return 2;} else if (month == 7 || month == 8 || month == 9) {return 3;} else {return 4;}}/*** 根据时间范围获得日集** @param dBegin:* @param dEnd:* @return java.util.List<java.lang.String>* @author Moqi* @date 2020/4/27*/public static List<String> findDates(Date dBegin, Date dEnd) {List<String> lDate = new ArrayList<String>();lDate.add(dateFormat.format(dBegin));Calendar calBegin = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calBegin.setTime(dBegin);Calendar calEnd = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calEnd.setTime(dEnd);// 测试此日期是否在指定日期之后while (dEnd.after(calBegin.getTime())) {// 根据日历的规则,为给定的日历字段添加或减去指定的时间量calBegin.add(Calendar.DATE, 1);lDate.add(dateFormat.format(calBegin.getTime()));}return lDate;}/*** 根据时间范围获得周集** @param dBegin:* @param dEnd:* @return java.util.List<java.lang.String>* @author Moqi* @date 2020/4/30*/public static List<String> findWeek(Date dBegin, Date dEnd) {List<String> lDate = new ArrayList<>();Calendar calBegin = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calBegin.setTime(dBegin);// 跨月情况大于等于四天归为一周calBegin.setMinimalDaysInFirstWeek(4);Calendar calEnd = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间calEnd.setTime(dEnd);// 根据日历的规则,为给定的日历字段添加或减去指定的时间量calEnd.add(Calendar.DATE, 1);// 测试此日期是否在指定日期之后while (calEnd.getTime().after(calBegin.getTime())) {int weekNo = calBegin.get(Calendar.WEEK_OF_YEAR);// 判断跨年情况if(calBegin.get(Calendar.MONTH)==11&&weekNo==1){Calendar newCal = Calendar.getInstance();newCal.setTime(calBegin.getTime());newCal.add(Calendar.YEAR,1);lDate.add(newCal.get(Calendar.YEAR) + "-" + weekNo);}else {lDate.add(calBegin.get(Calendar.YEAR)  + "-" + weekNo);}// 根据日历的规则,为给定的日历字段添加或减去指定的时间量calBegin.add(Calendar.DATE, 1);}lDate = lDate.stream().distinct().collect(Collectors.toList());return lDate;}public static void main(String[] args) throws ParseException {String start_time = "2019-05-01";String end_time = "2020-12-31";List<String> menthList = findMenth(dateFormat.parse(start_time), dateFormat.parse(end_time));List<String> quarterList = findQuarter(dateFormat.parse(start_time), dateFormat.parse(end_time));List<String> weekList = findWeek(dateFormat.parse(start_time), dateFormat.parse(end_time));List<String> yearList = findYear(dateFormat.parse(start_time), dateFormat.parse(end_time));}

java8 日期范围内 日/周/月/季度/年 的日期结果集相关推荐

  1. mysql分季度统计数据,mysql按日周月季度统计数据

    mysql按日周月季度统计数据 mysql按日.周.月.季度统计数据 1.使用DATE_FORMAT做等值条件查询 2.DATE_FORMAT函数语法,参考w3school 3.可使用格式 4.使用示 ...

  2. 日 周 月 季度 年 统计

    // 总量$total = Db::name("total")->count();// 周访问量$week = Db::name("total")-> ...

  3. Oracle按日周月分组统计,及next_day()函数详解

    1.概述 工作中遇到如下问题:统计周期内关键词数,而这里的周期内最常用的就是日周月. 日月比较容易处理,周的话可以通过next_day()函数实现. 2.实例问题 如下,有一张表ljb_test,包括 ...

  4. oracle 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解

    1.概述 工作中遇到如下問題:統計周期內關鍵詞數,而這里的周期內最常用的就是日周月. 日月比較容易處理,周的話可以通過next_day()函數實現. 2.實例問題 如下,有一張表ljb_test,包括 ...

  5. MACD多周期共振指标公式,日周月共振

    有人问多周期MACD怎么写,编写指标的难度其实不大,主要问题是解决多周期MACD显示的问题.日线.周线.月线三个周期,每个周期都有快线DIF和慢线DEA两条线,一共6条,怎么在副图上清晰显示出来. 一 ...

  6. php文章周月总排行榜怎么实现,帝国cms7.0实现日 周 月点击排行的方法

    本文将为您介绍的是帝国cms7.0实现日 周 月点击排行的方法,具体操作方法请看下文: 新增信息的排行不太符合我的要求.就自己琢磨了一套全站信息的月点击.周点击排行.需要新增几个字段及修改文件.下面开 ...

  7. KDJ日周月金叉共振指标

    昨天介绍了MACD多周期共振指标公式,KDJ通过类似的写法,也可以共振.本文介绍的KDJ日周月金叉共振指标包含日周金叉共振.日月金叉共振.周月金叉共振.日周月金叉共振四种类型. 需要注意的问题依然是周 ...

  8. 填写开始日期后根据天数或者月数计算结束日期

    根据天数计算结束日期 const getEndDateForDays = (date,day) => {var newTime = Date.parse(date) //将日期时间转换为毫秒值v ...

  9. 日周月筛选器_举个栗子!Tableau 技巧(147):使用 动态参数 筛选到最新日期值...

    之前,我们分享过如何在筛选日期时,始终自动筛选到最新日期值的方法:筛选到最新日期值. 现在,Tableau 2020.1 版本 用户也可以使用新增的动态参数功能,实现同样的呈现效果. 那么,如何利用 ...

最新文章

  1. HIbernate的优缺点
  2. 聊聊高并发(三十三)Java内存模型那些事(一)从一致性(Consistency)的角度理解Java内存模型
  3. 编写高性能 .NET 代码 第二章:垃圾回收 基本操作
  4. Swift - 计算次方(2的N次方,2的随机次方)
  5. 用c语言实现简单的tcp协议,实现一个简单的TCP协议下的C/S
  6. 2016级算法第四次上机-B ModricWang的序列问题
  7. 【maven】配置ali镜像
  8. JSP概述--JSP的起源,本质,运行原理
  9. 3D数学基础(一) | 坐标系
  10. JDY-10M组网 蓝牙MESH组网
  11. 项目经理必须学会的财务知识
  12. Web的相关概念及BC、CS结构
  13. C++排序求最值函数的调用
  14. 青蛙游戏 linux,小青蛙2048
  15. google收购摩托罗拉是摩托罗拉的噩梦的开始
  16. 大学计算机基础钮和荣,钮和荣
  17. 深入理解OpenGL之投影矩阵推导
  18. 程序员常用的代码比较工具,你更喜欢哪款?
  19. wordpress 形式php,将wordpress原生评论改造成论坛形式
  20. python爬取前程无忧_Python爬取前程无忧网址,并保存为txt文件

热门文章

  1. js添加多marker 高德地图_高德地图点聚合--Marker多点聚合及多个marker点击事件
  2. css渲染图片时放大或缩小图片变模糊处理方式
  3. 安卓常用框架、模块、软件
  4. 【MindSpore易点通】安装教程
  5. Block学习-关于Block是如何实现的,以及block中参数传递
  6. TCP/IP入门详解--业内最佳
  7. 苹果怎么换个性化主题
  8. 计算机课的英语怎么念,电脑课是什么意思
  9. 苹果手机语音备忘录在哪_苹果手机备忘录误删除别慌,教你免费恢复
  10. c++11 tupe