计算一个区间时间差值,时间保留剩下的差值

解决目的  begin end,去除集合类的其他区间差值List<rang> r1 = new ArrayList(); 得到差值package com.jowoiot.wmzs.utils.date;import com.google.common.collect.Lists;
import com.google.common.collect.Range;
import org.apache.commons.lang.time.DateFormatUtils;import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.OptionalInt;
import java.util.stream.Collectors;
import java.util.stream.IntStream;/*** @BelongsProject: wmzs* @BelongsPackage: com.jowoiot.wmzs.utils.date* @Author: lius* @CreateTime: 2023-08-30  17:36* @Description: 计算一个区间时间,去除其他区间时间保留剩下的差值* @Version: 1.0*/public class TimeRangeUtil {public final static String DATETIME_DEFAULT = "yyyy-MM-dd HH:mm:ss";/*** 获取时间范围差集* 把所有时间按顺序排序,取开始结束时间中间,每一个时间点构成区间,返回不在需要去除的时间区间** @param subtractionDateList 需要去除的时间 [[开始时间,结束时间], [开始时间,结束时间]]* @param min                 时间范围开始时间* @param max                 时间范围结束时间* @return*/public static List<Date[]> getDateSubtraction(List<Date[]> subtractionDateList, Date min, Date max) {List<Date> dateList = Lists.newArrayList(min, max);for (Date[] dates : subtractionDateList) {dateList.add(dates[0]);dateList.add(dates[1]);}List<Date> sortDateList = dateList.stream().sorted().collect(Collectors.toList());OptionalInt minIndex = IntStream.range(0, sortDateList.size()).filter(i -> sortDateList.get(i).compareTo(min) >= 0).findFirst();OptionalInt maxIndex = IntStream.range(0, sortDateList.size()).filter(i -> sortDateList.get(i).compareTo(max) >= 0).findFirst();List<Date[]> result = new ArrayList<>();if (!minIndex.isPresent() || !maxIndex.isPresent()) {return result;}List<Range<Date>> collect = subtractionDateList.stream().map(dates -> Range.open(dates[0], dates[1])).collect(Collectors.toList());List<Date> subList = sortDateList.subList(minIndex.getAsInt(), maxIndex.getAsInt());subList.add(sortDateList.get(maxIndex.getAsInt()));t:for (int i = 0; i < subList.size(); i++) {if (i == subList.size() - 1 || subList.get(i).compareTo(subList.get(i + 1)) == 0) {continue;}for (Range<Date> dateRange : collect) {if (dateRange.encloses(Range.open(subList.get(i), subList.get(i + 1)))) {continue t;}}result.add(new Date[]{subList.get(i), subList.get(i + 1)});}return result;}public static void main(String[] a) throws FileNotFoundException, ParseException {Date startDate = DateUtils.parseDate("2023-02-08 15:20:00", DATETIME_DEFAULT);Date endDate = DateUtils.parseDate("2023-02-08 16:30:00", DATETIME_DEFAULT);Date a1 = DateUtils.parseDate("2023-02-08 15:00:00", DATETIME_DEFAULT);Date a2 = DateUtils.parseDate("2023-02-08 15:29:00", DATETIME_DEFAULT);Date b1 = DateUtils.parseDate("2023-02-08 15:30:00", DATETIME_DEFAULT);Date b2 = DateUtils.parseDate("2023-02-08 16:00:00", DATETIME_DEFAULT);Date c1 = DateUtils.parseDate("2023-02-08 16:20:00", DATETIME_DEFAULT);Date c2 = DateUtils.parseDate("2023-02-08 16:50:00", DATETIME_DEFAULT);Date d1 = DateUtils.parseDate("2023-02-08 16:40:00", DATETIME_DEFAULT);Date d2 = DateUtils.parseDate("2023-02-08 16:50:00", DATETIME_DEFAULT);System.out.println("开始结束时间:" + DateFormatUtils.format(startDate, DATETIME_DEFAULT) + "—" + DateFormatUtils.format(endDate, DATETIME_DEFAULT));List<Date[]> list = new ArrayList<>();list.add(new Date[]{a1, a2});list.add(new Date[]{b1, b2});list.add(new Date[]{c1, c2});list.add(new Date[]{d1, d2});for (Date[] dates : list) {System.out.println("去除时间:" + DateFormatUtils.format(dates[0], DATETIME_DEFAULT) + "—" + DateFormatUtils.format(dates[1], DATETIME_DEFAULT));}List<Date[]> subtraction = getDateSubtraction(list, startDate, endDate);for (Date[] aa : subtraction) {String s = DateFormatUtils.format(aa[0], DATETIME_DEFAULT);String e = DateFormatUtils.format(aa[1], DATETIME_DEFAULT);System.out.println("差值:" + s + "——" + e);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机项目(8)——基于51单片机的DS1302时钟系统

本次做的设计&#xff0c;是利用DS1302时钟芯片&#xff0c;做了一个时钟&#xff0c;并且将实时时间通过串口发送到上位机进行显示。系统运行如下&#xff1a;&#xff08;protues文件和相关keil代码会在文章最后给出&#xff01;&#xff01;&#xff01;&#xff09; DS1302…

[ES]二基础 |

一、索引库操作 1、mapping属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; 1)type&#xff1a;字段数据类型&#xff0c;常见的简单类型有&#xff1a; ①字符串&#xff1a;text(可分词的文本)、keyword&#xff08;精确值&#xff0c…

如何使用vue-smooth-dnd

Vue Smooth DnD是一个基于Vue的平滑易用的拖放库。它提供了简单易用的API和可自定义的样式。 要使用Vue Smooth DnD&#xff0c;可以按照以下步骤进行操作&#xff1a; 安装Vue Smooth DnD npm install vue-smooth-dnd --save 在组件中引入Vue Smooth DnD import VueSmoot…

【Leetcode】127.单词接龙(Hard)

一、题目 1、题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s 1 s_1 s1​

【LeetCode每日一题】——274.H指数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 排序 二【题目难度】 中等 三【题目编号】 274.H指数 四【题目描述】 给你一个整数数组 ci…

如何使用RPA + ChatGPT自动化提高自己的工作效率

使用RPA&#xff08;Robotic Process Automation&#xff09;和ChatGPT可以结合来自动化提高自己的工作效率。下面是一些步骤&#xff1a; &#xff08;1&#xff09;确定自动化任务 首先&#xff0c;需要确定哪些任务或工作流程可以通过自动化来提高效率。这些任务应该是重复…

Qt无边框青绿色主题

收费产品&#xff0c;学生党、闹眼子党勿扰 收费金额&#xff1a;500元 1 概述 最近因项目需要&#xff0c;写了一个炫酷的青绿色、无边框界面&#xff0c;和3DSMax的界面有点类似。 2 截图 首先看看3DSMax的界面 不知道大家看出来没&#xff0c;这个ui其实很简单&#xff…

ELK安装、部署、调试 (七)kibana的安装与配置

1.介绍 Kibana 是一个基于浏览器的开源可视化工具&#xff0c;主要用于分析大量日志&#xff0c;以折线图、条形图、饼图、热图、区域图、坐标图、仪表、目标、时间等形式。预测或查看输入源的错误或其他重大事件趋势的变化。Kibana 与 Elasticsearch 和 Logstash 同步工作&am…

15年检测生涯转瞬即逝,复旦MBA助力邢国芒实现质量强国梦

日月光华&#xff0c;旦复旦兮&#xff01;复旦MBA如同一个巨大的磁场&#xff0c;吸引了诸多来自五湖四海、各行各业的职场精英。从初入职场的青涩懵懂到如今的独当一面专业干练&#xff0c;他们逐渐成长为职场的中坚力量&#xff0c;在各自领域内发光发热。作为新时代的青年&…

Positive Technologies:五分之四的网络攻击具有针对性

Positive Technologies 对 2023 年第二季度的相关网络威胁进行了分析。报告显示&#xff0c;自今年年初以来&#xff0c;有针对性的攻击数量增加了 10%&#xff0c;目前占 78%。专家们注意到利用漏洞的大规模攻击和大量用户个人数据的泄露。此外&#xff0c;在此期间&#xff0…

git pull 总提示让输入merge 信息

问题描述&#xff1a;在生产环境拉代码的时候&#xff0c;总是出现 .git/MERGE_MSG&#xff0c;很烦。 虽然每次可以通过输入 &#xff1a;q 命令&#xff0c;取消&#xff0c;然后完成拉取。但是这样就很影响效率。 解决方法&#xff1a; 方法一&#xff1a; 暂时屏蔽错误法…

算法 稀疏数组 数组优化 数组压缩 二维数组转稀疏数组 算法合集(二)

1. 五子棋游戏&#xff0c;玩家对战一半停战休息&#xff0c;此时需要存储当前对战双方棋子信息 a. 采用二维数组存储&#xff1a; 0为空&#xff0c; 1代表黑棋 2代表蓝色棋子 b. 棋盘为11行&#xff0c;11列 > int [][] chessArray new int [11][11]; c. 出现的问题&am…

【校招VIP】产品面试之面试官的真实意图

考点介绍&#xff1a; 大厂面试时&#xff0c;面试官提出的问题除了了解经历和想法外&#xff0c;最看重的是思维逻辑能力、团队协作能力和协调能力。 『产品面试之面试官的真实意图』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点题目 1. 你遇到的最大的…

无涯教程-Android - RadioButton函数

RadioButton有两种状态:选中或未选中,这允许用户从一组中选择一个选项。 Radio Button 示例 本示例将带您完成一些简单的步骤,以展示如何使用Linear Layout和RadioButton创建自己的Android应用程序。 以下是修改后的主要Activity文件 src/MainActivity.java 的内容。 packa…

Python 中的类,包括self关键字、类的属性限制访问

Python 中的类 一 、类和对象1.概念2.写法&#xff1a; 二、 self用法详解1.self代表类的实例&#xff0c;而非类2.self可以不写吗&#xff1f;3.在继承时&#xff0c;self的使用。 三、 属性限制访问1. 系统定义2.保护类型成员3.私有类型成员 一 、类和对象 1.概念 类是封装…

【1654. 到家的最少跳跃次数】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发&#xff0c;到达它的家。 跳蚤跳跃的规则如下&#xff1a; 它可以 往前 跳恰好 a 个位置&#xff08;即往右跳&#xff09;。它可以 …

Git——Windows平台创建gitee私有仓库详解

目录 1. 安装git 2. gitbash配置 2.1 设置 2.2 生成key 2.3 项目管理 2.3.1 本地新建 2.3.2 clone远程仓库的工程到本地改文件 1. 安装git 默认安装。 2. gitbash配置 2.1 设置 打开gitbash&#xff0c;设置用户名和邮箱&#xff1a; git config --global user.name …

vue3封装echarts图表数据无法渲染到页面

问题是后端的数据已经成功返回到前端了&#xff0c;但是Echarts图表一直不能被渲染&#xff0c;卡了一个多小时&#xff0c;最后问gpt才解决&#xff08;gptyyds&#xff01;&#xff01;&#xff01;&#xff09; methods: {loadGet() {this.$axios.get(this.$httpUrl /goods…

Web安全——穷举爆破上篇(仅供学习)

Web安全 一、概述二、常见的服务1、burpsuite 穷举后台密码2、burpsuite 对 webshell 穷举破解密码3、有 token 防御的网站后台穷举破解密码3.1 burpsuite 设置宏获取 token 对网站后台密码破解3.2 编写脚本获取token 对网站后台密码破解 4、针对有验证码后台的穷举方法4.1 coo…