当前位置: 首页 > news >正文

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

解决目的  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);}}}

相关文章:

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

解决目的 begin end&#xff0c;去除集合类的其他区间差值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.Dat…...

uniapp 微信小程序添加隐私保护指引

隐私弹窗&#xff1a; <uni-popup ref"popup"><view class"popupWrap"><view class"popupTxt">在你使用【最美万年历】之前&#xff0c;请仔细阅读<text class"blueColor" click"handleOpenPrivacyContract…...

行业追踪,2023-08-30

自动复盘 2023-08-30 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

Redis——》Redis的部署方式对分布式锁的影响

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...

VTK——使用包围盒切割医学图像

VTK 库 vtkDICOMImageReader&#xff1a;专门用于读取医学图像格式 DICOM 的类。DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是医学图像和信息的标准。 vtkImageGaussianSmooth&#xff1a;用于图像的高斯平滑处理&#xff0c;主要用于去噪…...

在工具提示中使用自绘修改字体

在上一篇文章中&#xff0c;我们学习了如何在应用程序中添加工具提示。在之前的例子代码中&#xff0c;我们通过简单地为创建的工具提示设置了目标字体&#xff0c;这种方法很简单&#xff0c;因为自始至终&#xff0c;我们都只创建了一个工具提示。 但是&#xff0c;如果在应…...

【Git管理工具】使用Docker部署GitLab服务器

【Git管理工具】使用Docker部署GitLab服务器 一、GitLab介绍1.1 GitLab简介1.2 GitLab特点二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本三、Docker CompseV2版本升级(可选)3.1 创建…...

安装kali虚拟机镜像的坑

1.0 安装虚拟机镜像成功之后&#xff0c;只有光标&#xff0c;没有界面 在VMware上安装kali linux环境时&#xff0c;根据提示操作完成后&#xff0c;开启虚拟机&#xff0c;屏幕黑屏&#xff0c;左上角有一个光标在闪&#xff0c;一直开不了机。 出现问题的原因&#xff0c;…...

【Android】TextView适配文本大小并保证中英文内容均在指定的UI 组件内部

问题 现在有一个需求&#xff0c;在中文环境下textView没有超过底层的组件限制&#xff0c;但是一切换到英文环境就超出了&#xff0c;这个如何解决呢&#xff1f;有啥例子吗&#xff1f; 就像这样子的。 解决 全部代码如下&#xff1a; <?xml version"1.0"…...

【力扣每日一题】2023.8.31 一个图中连通三元组的最小度数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个无向图&#xff0c;要我们找出三个节点&#xff0c;这三个节点他们两两相连&#xff0c;这三个节点除了连接到对方的其他线…...

C语言--volatile

volatile 1、介绍 volatile是一个类型修饰符&#xff08;type specifier&#xff09;。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile&#xff0c;基本上会导致这样的结果&#xff1a;要么无法编写多线程程序&#xff0c;要么编译器失去大量优化的机会。 …...

技术深入解析与教程:网络安全技术探秘

第一章&#xff1a;引言 在当今数字化时代&#xff0c;网络安全已经成为了重要议题。随着各种信息和业务在网络上的传输与存储&#xff0c;安全问题也日益突出。本文将带您深入探讨网络安全领域中的关键技术&#xff0c;涵盖渗透测试、漏洞挖掘以及恶意软件分析等方面&#xf…...

Android studio 实现生成二维码和扫描二维码

效果图 build.gradle(:app)添加依赖 dependencies {implementation com.google.zxing:core:3.3.3implementation com.journeyapps:zxing-android-embedded:3.6.0implementation com.google.zxing:javase:3.0.0 }Manifests.xml <uses-permission android:name"android…...

Linux中7种文件类型

Linux中文件类型 Linux中一切皆为文件。 查看文件类型&#xff08;输入以下命令根据第一列的第一个字符可区别文件类型&#xff09; ls -l目录文件 第一个字符为d 类似于Windows文件夹。 链接文件&#xff08;软链接&#xff09; 第一个字符为l 例如Windows的快捷方式&…...

基础算法--快速排序

快速排序 算法原理 1. 取一个元素p(第一个元素&#xff0c;最后一个元素&#xff0c;中间元素&#xff0c;随机 都可以)&#xff0c;使元素p归位。 2. 列表被p分成两部分&#xff0c;左边都比p小&#xff0c;右边都比p大。 3. 递归完成排序。 动态演示 python代码实现 import…...

机器学习的第一节基本概念的相关学习

目录 1.1 决策树的概念 1.2 KNN的概念 1.2.1KNN的基本原理 1.2.2 流程&#xff1a; 1.2.3 优缺点 1.3 深度学习 1.4 梯度下降 损失函数 1.5 特征与特征选择 特征选择的目的 1.6 python中dot函数总结 一维数组的点积&#xff1a; 二维数组&#xff08;矩阵&#xff09;的乘法&am…...

Python 之__name__的用法以及解释

文章目录 介绍代码 介绍 __name__ 是一个在 Python 中特殊的内置变量&#xff0c;用于确定一个 Python 文件是被直接运行还是被导入为模块。 文件作为模板导入&#xff0c;则其 __name__属性值被自动设置为模块名 文件作为程序直接运行&#xff0c;则__name__属性属性值被自动设…...

【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

&#x1f389;欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指…...

networkX-03-连通度、全局网络效率、局部网络效率、聚类系数计算

文章目录 1.连通度1.1 检查图是否连通1.2 检查有向图是否为强连通1.3 点连通度、边连通度&#xff1a; 2.网络效率2.1全局效率2.2 局部效率2.2.1 查找子图2.2.3 局部效率源码分析 3.聚类系数&#xff08;Clustering Coefficient&#xff09;3.1 聚类系统源码分析 教程仓库地址&…...

【深入解读Redis系列】Redis系列(五):切片集群详解

首发博客地址 https://blog.zysicyj.top/ 系列文章地址[1] 如果 Redis 内存很大怎么办&#xff1f; 假设一台 32G 内存的服务器部署了一个 Redis&#xff0c;内存占用了 25G&#xff0c;会发生什么&#xff1f; 此时最明显的表现是 Redis 的响应变慢&#xff0c;甚至非常慢。 这…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...