public class Test {/*** 共有7天的数据,按每一天的时间段划分数据,如果有一条数据从第一天贯穿到第4天,那么第一天,二天,三天,四天中都要有此条数据* @param args*/public static void main(String[] args) {//设置要校验参数List<User> list = new ArrayList<>();User u1 = User.builder().age(11).id(1).name("小黑").startTime(new Date("2022/02/01 06:00:00")).endTime(new Date("2022/02/02 06:00:00")).build();User u2 = User.builder().age(22).id(2).name("小红").startTime(new Date("2022/02/02 06:00:00")).endTime(new Date("2022/02/03 06:00:00")).build();User u3 = User.builder().age(33).id(3).name("小蓝").startTime(new Date("2022/02/03 06:00:00")).endTime(new Date("2022/02/04 06:00:00")).build();User u4 = User.builder().age(44).id(4).name("小绿").startTime(new Date("2022/02/04 06:00:00")).endTime(new Date("2022/02/05 06:00:00")).build();User u5 = User.builder().age(55).id(5).name("小黄").startTime(new Date("2022/02/01 06:00:00")).endTime(new Date("2022/02/05 06:00:00")).build();
//        list.add(u1);
//        list.add(u2);
//        list.add(u3);
//        list.add(u4);list.add(u5);//得到今天的时间Date nowDate = DateUtils.getNowDate();//转化格式为 LocalDateTimeLocalDateTime dateTime = DateUtils.javaDate2LocalDateTime(nowDate);//拿到当前小时int hour = dateTime.getHour();Date start = null;Date end = null;//获得开始时间点:当天6点0分
//        LocalDateTime todayLine = LocalDateTime.of(dateTime.getYear(), dateTime.getMonth(), dateTime.getDayOfMonth(), 6, 0);//获得本年2月1号6点0分的时间点LocalDateTime todayLine = LocalDateTime.of(dateTime.getYear(), 2, 1, 6, 0);//当前时间(小时)大于等于 6点的时候,查开始时间是今天早晨6点到第8天早晨6点的数据,一共查8天//如:开始时间是:2022年2月1号6点0分  结束时间应该是:2022年2月9号6点0分if (hour >= 6) {//今日凌晨6点 hour-of-day, from 0 to 23LocalDateTime endDateTime = todayLine.plusDays(8);start = DateUtils.localDateTime2JavaDate(todayLine);end = DateUtils.localDateTime2JavaDate(endDateTime);} else {//明日凌晨6点LocalDateTime startDateTime = todayLine.plusDays(8);start = DateUtils.localDateTime2JavaDate(startDateTime);end = DateUtils.localDateTime2JavaDate(todayLine);}//dateTimeMap key:每天开始时间  value:每天结束时间Map<Date, Date> dateTimeMap = new LinkedHashMap<>();int timeCount = 1;while (timeCount < 8) {dateTimeMap.put(DateUtils.localDateTime2JavaDate(todayLine.plusDays(timeCount - 1)), DateUtils.localDateTime2JavaDate(todayLine.plusDays(timeCount)));timeCount++;}//获取每天的开始时间Set<Date> startTimeSet = dateTimeMap.keySet();//把7天的数据,根据时间段划分Map<Date, List<User>> sevenTimeMap = getSevenTimeMap(dateTimeMap, startTimeSet, list);for (Map.Entry<Date, List<User>> m : sevenTimeMap.entrySet()) {System.out.println("key: " + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",m.getKey()) + "   value: " + m.getValue());}}/*** 时间分割* @param dateTimeMap* @param startTimeSet* @param vos* @return*/private static Map<Date, List<User>> getSevenTimeMap(Map<Date, Date> dateTimeMap, Set<Date> startTimeSet, List<User> vos) {List<Date> list = new ArrayList<>(startTimeSet);List<User> newList = new ArrayList<>();List<User> oldList = vos.stream().filter(x -> {for (int i = 0; i < list.size() - 1; i++) {Date startTime = list.get(i);//数组开始时间《当前开始     数组结束时间》开始时间if (x.getStartTime().before(startTime) && x.getEndTime().after(startTime)) {x.setSortTime(startTime);int num = 1;while (true) {if (num +i > list.size()-1){break;}Date date = list.get(i + num);//开始时间 小于 特定时间     结束时间 大于 特定时间if (x.getStartTime().before(date) && x.getEndTime().after(date)) {User build = User.builder().id(x.getId()).age(x.getAge()).name(x.getName()).startTime(x.getStartTime()).endTime(x.getEndTime()).build();build.setSortTime(date);newList.add(build);num++;} else {break;}}return true;} else if (x.getStartTime().after(startTime) && x.getStartTime().before(dateTimeMap.get(startTime))) {//数组开始时间》开始    数组开始时间《结束时间x.setSortTime(startTime);int num = 1;while (true) {if (num +i >list.size()-1){break;}Date date = list.get(i + num);//开始时间 小于 特定时间     结束时间 大于 特定时间if (x.getStartTime().before(date) && x.getEndTime().after(date)) {User build = User.builder().id(x.getId()).age(x.getAge()).name(x.getName()).startTime(x.getStartTime()).endTime(x.getEndTime()).build();build.setSortTime(date);newList.add(build);num++;} else {break;}}return true;} else if (x.getStartTime().equals(startTime) || x.getEndTime().equals(dateTimeMap.get(startTime))) {//数组开始时间 == 开始时间   数组结束时间 == 结束时间x.setSortTime(startTime);int num = 1;while (true) {if (num +i >list.size()-1){break;}Date date = list.get(i + num);//开始时间 小于 特定时间     结束时间 大于 特定时间if (x.getStartTime().before(date) && x.getEndTime().after(date)) {User build = User.builder().id(x.getId()).age(x.getAge()).name(x.getName()).startTime(x.getStartTime()).endTime(x.getEndTime()).build();build.setSortTime(date);newList.add(build);num++;} else {break;}}return true;}}return false;}).collect(Collectors.toList());oldList.addAll(newList);return oldList.stream().collect(Collectors.groupingBy(s -> s.getSortTime()));}
}@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class User implements Serializable{private Integer id;//年龄private Integer age;//名字private String name;//开始时间private Date startTime;//结束时间private Date endTime;//排序分组的private Date sortTime;}@Data
@Builder
class Demo {private Integer id;private List<User> userList;
}
public class Test {/*** 共有7天的数据,按每一天的时间段划分数据* @param args*/public static void main(String[] args) {//设置要校验参数List<User> list = new ArrayList<>();User u1 = User.builder().age(11).id(1).name("小黑").startTime(new Date("2022/02/01 06:00:00")).endTime(new Date("2022/02/02 06:00:00")).build();User u2 = User.builder().age(22).id(2).name("小红").startTime(new Date("2022/02/02 06:00:00")).endTime(new Date("2022/02/03 06:00:00")).build();User u3 = User.builder().age(33).id(3).name("小蓝").startTime(new Date("2022/02/03 06:00:00")).endTime(new Date("2022/02/04 06:00:00")).build();User u4 = User.builder().age(44).id(4).name("小绿").startTime(new Date("2022/02/04 06:00:00")).endTime(new Date("2022/02/05 06:00:00")).build();User u5 = User.builder().age(55).id(5).name("小黄").startTime(new Date("2022/02/01 06:00:00")).endTime(new Date("2022/02/05 06:00:00")).build();list.add(u1);list.add(u2);list.add(u3);list.add(u4);list.add(u5);//得到今天的时间Date nowDate = DateUtils.getNowDate();//转化格式为 LocalDateTimeLocalDateTime dateTime = DateUtils.javaDate2LocalDateTime(nowDate);//拿到当前小时int hour = dateTime.getHour();Date start = null;Date end = null;//获得开始时间点:当天6点0分
//        LocalDateTime todayLine = LocalDateTime.of(dateTime.getYear(), dateTime.getMonth(), dateTime.getDayOfMonth(), 6, 0);//获得本年2月1号6点0分的时间点LocalDateTime todayLine = LocalDateTime.of(dateTime.getYear(), 2, 1, 6, 0);//当前时间(小时)大于等于 6点的时候,查开始时间是今天早晨6点到第8天早晨6点的数据,一共查8天//如:开始时间是:2022年2月1号6点0分  结束时间应该是:2022年2月9号6点0分if (hour >= 6) {//今日凌晨6点 hour-of-day, from 0 to 23LocalDateTime endDateTime = todayLine.plusDays(8);start = DateUtils.localDateTime2JavaDate(todayLine);end = DateUtils.localDateTime2JavaDate(endDateTime);} else {//明日凌晨6点LocalDateTime startDateTime = todayLine.plusDays(8);start = DateUtils.localDateTime2JavaDate(startDateTime);end = DateUtils.localDateTime2JavaDate(todayLine);}//dateTimeMap key:每天开始时间  value:每天结束时间Map<Date, Date> dateTimeMap = new LinkedHashMap<>();int timeCount = 1;while (timeCount < 8) {dateTimeMap.put(DateUtils.localDateTime2JavaDate(todayLine.plusDays(timeCount - 1)), DateUtils.localDateTime2JavaDate(todayLine.plusDays(timeCount)));timeCount++;}//获取每天的开始时间Set<Date> startTimeSet = dateTimeMap.keySet();//把7天的数据,根据时间段划分Map<Date, List<User>> sevenTimeMap = getSevenTimeMap(dateTimeMap, startTimeSet, list);for (Map.Entry<Date, List<User>> m : sevenTimeMap.entrySet()) {System.out.println("key: " + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss",m.getKey()) + "   value: " + m.getValue());}}/*** 时间分割* @param dateTimeMap* @param startTimeSet* @param vos* @return*/private static Map<Date, List<User>> getSevenTimeMap(Map<Date, Date> dateTimeMap, Set<Date> startTimeSet, List<User> vos) {return vos.stream().filter(x -> {//循环时间集合   时间大于开始时间  小于结束时间for (Date startTime : startTimeSet) {if (x.getStartTime().before(startTime) && x.getEndTime().after(startTime)) {x.setSortTime(startTime);return true;} else if (x.getStartTime().after(startTime) && x.getStartTime().before(dateTimeMap.get(startTime))) {x.setSortTime(startTime);return true;} else if (x.getStartTime().equals(startTime) || x.getEndTime().equals(dateTimeMap.get(startTime))) {x.setSortTime(startTime);return true;}}return false;}).collect(Collectors.groupingBy(User::getSortTime));}}@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
class User implements Serializable{private Integer id;//年龄private Integer age;//名字private String name;//开始时间private Date startTime;//结束时间private Date endTime;//排序分组的private Date sortTime;}@Data
@Builder
class Demo {private Integer id;private List<User> userList;
}

根据时间段进行数据的划分相关推荐

  1. Mysql查询时间段内数据,并处理相同日期或同类型的数据

    Mysql查询时间段内数据 表如图,表名为demo,表为某库存量的实时更新表 主要数据为:time时间数据,amount库存量数据 Mysql查询时间段内的数据可以用between方法 select ...

  2. mysql 查询某个日期时间段,每天同一时间段的数据

    mysql 查询某个日期时间段,每天同一时间段的数据: SELECT * FROM t_a01_eltable WHERE DATE_FORMAT(acqtime,'%Y-%m-%d')>='2 ...

  3. mysql查询某一时间段之后数据的sql_mysql进阶(十九)SQL语句如何精准查找某一时间段的数据...

    SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm ...

  4. python取特定年份的数据_python,_怎样用python提取不同股票csv里特定时间段的数据,python - phpStudy...

    怎样用python提取不同股票csv里特定时间段的数据 我有几千只股票的csv数据,需要算所有股票在特定时间段内的收益率. 但是数据里的日期信息并不统一,有的csv到2011年就没有了之后的信息了,有 ...

  5. python人工智能——机器学习——数据的划分和介绍

    sklearn数据集 1.数据集划分 2.sklearn数据集接口介绍 3. sklearn分类数据集 4. sklearn回归数据集 数据集划分 机器学习一般的数据集会划分为两个部分: 训练数据:用 ...

  6. 【Java数据库】SQL时间类型Date Time Timestamp区别、插入/取出指定时间段的数据

    java.util.Date 子类:java.sql.Date 表示年月日 子类:java.sql.Time 表示时分秒 子类:java.sql.Timestamp 表示年月日 时分秒 1970.01 ...

  7. 查询某一支接口,指定时间段的数据 按分钟排序

    --查询某一支接口,指定时间段的数据 按分钟排序 select a.servicename,reqdate,substr(reqtime,1,5),count(1)from 表名 awhere ser ...

  8. python指定时间范围数据_Python提取特定时间段内数据的方法实例

    Python提取特定时间段内数据的方法实例 发布时间:2020-09-24 05:46:06 来源:脚本之家 阅读:75 作者:淮南草 python提取特定时间段内的数据 尝试一下: data['Da ...

  9. ThinkPHP中查询一个时间段的数据

    在实际操作的时候,需要从数据库中查询一个时间段的数据并返回使用,我在数据库中设置如下: 其中时间设置是datetime类型,没使用时间戳的显示,而是按照年月日时分秒的格式显示的,然后想从数据库中取出一 ...

最新文章

  1. python使用matplotlib可视化线图(line plot)、使用invert_yaxis函数将Y轴坐标反序(invert the y axis in matplotlib)
  2. ant design vue input change_Ant-design-vue项目实现动态路由
  3. 【NLP】 聊聊NLP中的attention机制
  4. mysql创建只读权限用户_新品速递 | Harbor 修复权限提升漏洞,MySQL Plus 支持密码强度校验以及审计功能...
  5. 加速 VR 渲染地狱难度进阶篇:降低图形 API 调用次数
  6. linux把svs文件分割,freeebsd,pkg_add,svsup,make改服务器的设定
  7. 烟台大学计算机专业调剂贴吧,烟台大学计算机与控制工程学院2021年考研复试与调剂的说明...
  8. Android进阶2之图片倒影效果 .
  9. tc275单片机的内核_TC275开发板学习心得(一)
  10. Dependency Walker
  11. abb机器人写字程序实例_【干货】ABB机器人编程实例一
  12. 使用DOS命令查找并复制指定目录及其子目录下的同一后缀所有文件
  13. Typora-PicGo-SMMS图床(Mac电脑和windows电脑)
  14. SPSS如何使用基础功能?
  15. USB 发展 缺陷 与 未来
  16. 《软件测试》读书笔记
  17. int、long、long long、unsigned int、_int64的取值范围(与不同位数的编译器有关)
  18. 写程序电脑常用快捷键
  19. TL-R402M路由器恢复出厂设置方法
  20. windows抓屏排除指定窗口

热门文章

  1. 基于声网 Agora 信令 SDK 开发聊天室应用(一)
  2. 火车票网上抢票软件推荐(亲测)
  3. 腾讯各事业群裁员比例没有网传30%那么高;郭明錤称苹果汽车团队已解散;Go 1.18 发布,正式支持泛型|极客头条
  4. java登录注册抽奖完整代码_JAVA实现用户抽奖功能(附完整代码)
  5. 前端学习笔记:CSS3选择器的继承、优先级和重要性
  6. 计算机的益处和坏处 英语作文,网络的好处和坏处英语作文带翻译
  7. 内存中的Buffer和Cache
  8. 机器学习中怎样的特征才是好特征
  9. C# 文件操作,查看所有的文件夹和文件
  10. 科学计算机bug,EMUI小助手:计算器百分比计算出bug?真相在这儿!