atitit.判断时间重叠方法总结 java c++ c#.net js php
atitit.判断时间重叠方法总结 java c++ c#.net js php
2. 重叠算法 实际上就是日期集合跟个时间集合的的交集(乘法算法) 1
1. 判断时间重叠具体流程思路
先判断日期重叠,在判断时间区段重叠。
每个区段都有内包含,外包含,左包含,右包括...所以,or表达式需要4*4=16个..每个or 表达式包括4个and表达式( 两个日期表达式,两个时间范围表达式)
最终的最终的的表达式需要16*4=64个,,比较长的了..
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 重叠算法 实际上就是日期集合跟个时间集合的的交集(乘法算法)
在程序设计里有。。。。。
回答
那实际上就是交、并、差。
所谓加,实际上就是求两个集合的并集
减,就是求两个集合的差集
乘,就是求两个集合的并集
它们都是从逻辑的运算推出来的
另外更正一下:乘是求两个集合的交集。
3. 代码---
private void ini() {
String db_start_fld = "start_time";
String db_end_fld = "end_time";
String db_include_exp = "db_start_fld>=ui_start and db_end_fld<=ui_end ";
String db_outclude_exp = "db_start_fld<=ui_start and db_end_fld>=ui_end ";
String db_leftinclude_exp = "db_end_fld>=ui_start and db_end_fld <=ui_end ";
String db_ritinclude_exp = "db_start_fld>=ui_start and db_end_fld<=ui_end ";
List<String> dateExpList = new ArrayList<String>() {
{
add(expandFunc(db_include_exp));
add(expandFunc(db_outclude_exp));
add(expandFunc(db_leftinclude_exp));
add(expandFunc(db_ritinclude_exp));
}
private String expandFunc(String db_include_exp) {
String db_start_fld_Datefunc = " CONVERT(varchar(100), db_start_fld, 23)";
String db_end_fld_Datefunc = " CONVERT(varchar(100), db_end_fld, 23)";
return db_include_exp.replaceAll("db_start_fld",
db_start_fld_Datefunc).replaceAll("db_end_fld",
db_end_fld_Datefunc);
}
};
List<String> timeExpList = new ArrayList<String>() {
{
add(expandFunc(db_include_exp));
add(expandFunc(db_outclude_exp));
add(expandFunc(db_leftinclude_exp));
add(expandFunc(db_ritinclude_exp));
}
private String expandFunc(String db_include_exp) {
String db_start_fld_Timefunc = " CONVERT(varchar(100), db_start_fld, 8)";
String db_end_fld_Timefunc = " CONVERT(varchar(100), db_end_fld, 8)";
return db_include_exp.replaceAll("db_start_fld",
db_start_fld_Timefunc).replaceAll("db_end_fld",
db_end_fld_Timefunc);
}
};
List<String> finalList= new ArrayList<String>() {{
for (String dateExp : dateExpList) {
for (String timeExp : timeExpList) {
this.add(dateExp+" and "+timeExp.replaceAll("db_start_fld", db_start_fld).replaceAll("db_end_fld", db_end_fld));
}
}
}};
String sql=new ArrayList(){
private String exec( ) {
String exp_final=" 1=1 ";
for (String exp : finalList) {
//if(exp_final.length()==0)
exp_final=exp_final + " or ( "+exp +" ) ";
}
return exp_final;
}}.exec( );
System.out.println(sql);
}
4. 最终生成的sql
SELECT *
FROM tab
WHERE 1=1
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)<=ui_start
AND CONVERT(varchar(100), end_time, 8)>=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), end_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8) <=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end
AND CONVERT(varchar(100), start_time, 8)<=ui_start
AND CONVERT(varchar(100), end_time, 8)>=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end
AND CONVERT(varchar(100), end_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8) <=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)<=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)>=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end
AND CONVERT(varchar(100), start_time, 8)<=ui_start
AND CONVERT(varchar(100), end_time, 8)>=ui_end)
OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end
AND CONVERT(varchar(100), end_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8) <=ui_end)
OR (CONVERT(varchar(100), db_end_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23) <=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)<=ui_start
AND CONVERT(varchar(100), end_time, 8)>=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), end_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8) <=ui_end)
OR (CONVERT(varchar(100), db_start_fld, 23)>=ui_start
AND CONVERT(varchar(100), db_end_fld, 23)<=ui_end
AND CONVERT(varchar(100), start_time, 8)>=ui_start
AND CONVERT(varchar(100), end_time, 8)<=ui_end)
5. 参考
java 时间段重合时间差 - 天才少年程序员-李荣盛专栏 - 博客频道 - CSDN.NET
JAVA中如何判断两个时间段是否有交集-CSDN论坛-CSDN.NET-中国最大的IT技术社区
比较两个日期间隔是否有碰撞的工具类,判断两个时间区间是否有交集(单位天) Java - 和申的日志 - 网易博客
atitit.判断时间重叠方法总结 java c++ c#.net js php的更多相关文章
- JAVA 导出 Excel, JS 导出 Excel
本介绍两种Excle导出方法: JAVA 导出 Excle, JS 导出 Excle 1, js 根据 html 页面的 table > tr > td 标签导出 js代码: //导出 v ...
- atitit.技术选型方法总结为什么java就是比.net有前途
atitit.技术选型方法总结为什么java就是比.net有前途 #----按照不同的需要有不铜的法... 一般有开发效率,稳定性上的需要.. 作者 老哇的爪子 Attilax 艾龙, EMAIL: ...
- Atitit 判断判断一张图片是否包含另一张小图片
Atitit 判断判断一张图片是否包含另一张小图片 1. keyword1 2. 模板匹配是在图像中寻找目标的方法之一(切割+图像相似度计算)1 3. 匹配效果2 4. 图片相似度的算法(感知哈希算 ...
- atitit.api设计 方法 指南 手册 v2 q929.docx
atitit.api设计 方法 指南 手册 v2 q929.docx atitit.api设计原则与方法 1. 归一化(锤子钉子理论)1 1.1. 链式方法2 1.2. 规则5:建立返回值类型2 1. ...
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载”和“纵向重载”1 1.2. 方法签名通过 方法名称,参数 ...
- Atitit 图像处理 调用opencv 通过java api attilax总结
Atitit 图像处理 调用opencv 通过java api attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- Atitit 深入理解命名空间namespace java c# php js
Atitit 深入理解命名空间namespace java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3 ...
- atitit.架构设计---方法调用结果使用异常还是返回值
atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...
随机推荐
- 如何编译Linux内核
内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广 大爱好者的支持下,内核版本不断更新.新的内核修订了旧内 ...
- linux集成开发环境
Linux操作系统的种种集成开发环境 随着Linux的逐渐兴起,已经有为数众多的程序在上面驰骋了,许多开发环境(Development Environment)也应运而生.好的开发环境一定是集成了编辑 ...
- Android 工程报错解决 Unable to resolve target 'android-17'
转自:http://www.cnblogs.com/csulennon/p/3705177.html 换了系统后,重新安装了Android SDK和ADT插件,导入之前的工作空间.居然发现所有的And ...
- 仿LOL项目开发第六天
仿LOL项目开发第六天 by草帽 OK,因为更新模块已经处理好了,接着开始登陆的编写.那么我们就需要状态机的管理. 所谓状态机就是在哪个状态执行那个状态的代码逻辑: 那么我们开始编写GameState ...
- Flink及主流流框架spark,storm比较
干货 | Flink及主流流框架比较 IT刊 百家号17-05-2220:16 引言 随着大数据时代的来临,大数据产品层出不穷.我们最近也对一款业内非常火的大数据产品 - Apache Flink做了 ...
- 高性能Mysql主从架构的复制原理及配置
1. 复制概述 1.1 mysql支持的复制类型 1.2 复制解决的问题 1.3 复制如何工作 2. 2 复制配置 2.1创建复制帐号 2.2拷贝数据 2.3配置master 2.4配置slave 2 ...
- STL之set集合容器 【转】
set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的的数据结构,在插入元素时,它会自动调整二叉树的排列,把该元素放到适当的位置,以确保每个子树根节点的键值大于左子树所有节点的键 ...
- Pycharm 2018 激活 亲测有效
下载 https://share.weiyun.com/5NVc5U3 并将 JetbrainsCrack-3.1-release-enc.jar 放置到 pycharm安装目录的\bin目录下( ...
- eclipse中.properties文件不能输入中文的解决办法
打开Eclipse-Window-Preferences,选择General->Content Types,然后修改右面的Text下的Java Properites File的默认编码方式为UT ...
- </p>标题设置
333333333333333333333333333333 border-top-left-radius: 3px; border-top-right-radius: 3px; border-bot ...