atitit.判断时间重叠方法总结 java c++ c#.net  js php

1. 判断时间重叠具体流程思路 1

2. 重叠算法 实际上就是日期集合跟个时间集合的的交集(乘法算法) 1

3. 代码--- 1

4. 最终生成的sql 3

5. 参考 5

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的更多相关文章

  1. JAVA 导出 Excel, JS 导出 Excel

    本介绍两种Excle导出方法: JAVA 导出 Excle, JS 导出 Excle 1, js 根据 html 页面的 table > tr > td 标签导出 js代码: //导出 v ...

  2. atitit.技术选型方法总结为什么java就是比.net有前途

    atitit.技术选型方法总结为什么java就是比.net有前途 #----按照不同的需要有不铜的法... 一般有开发效率,稳定性上的需要.. 作者 老哇的爪子 Attilax 艾龙,  EMAIL: ...

  3. Atitit 判断判断一张图片是否包含另一张小图片

    Atitit 判断判断一张图片是否包含另一张小图片 1. keyword1 2.  模板匹配是在图像中寻找目标的方法之一(切割+图像相似度计算)1 3. 匹配效果2 4. 图片相似度的算法(感知哈希算 ...

  4. atitit.api设计 方法 指南 手册 v2 q929.docx

    atitit.api设计 方法 指南 手册 v2 q929.docx atitit.api设计原则与方法 1. 归一化(锤子钉子理论)1 1.1. 链式方法2 1.2. 规则5:建立返回值类型2 1. ...

  5. Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理

    Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理 1. 重载包括:普通方法的重载和构造方法的重载 1 1.1. 横向重载”和“纵向重载”1 1.2. 方法签名通过  方法名称,参数 ...

  6. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...

  7. Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结

    Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...

  8. Atitit  深入理解命名空间namespace  java c# php js

    Atitit  深入理解命名空间namespace  java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3 ...

  9. atitit.架构设计---方法调用结果使用异常还是返回值

    atitit.架构设计---方法调用结果使用异常还是返回值 1. 应该返回BOOL类型还是异常 1 2. 最终会有四种状况,抛出异常.返回特殊值.阻塞.超时 1 3. 异常的优缺点点 1 4. jav ...

随机推荐

  1. linux有用技巧:使用ntfs-3g挂载ntfs设备

    1.几种文件系统的比較 (1)在linux系统中支持一下文件系统:               Ext2         第二扩展文件系统(简称 ext2 或者 ext2) 非常多年前就已经成为 GN ...

  2. BigDecimal 执行精确小数计算

    来考虑这样一种情况,先来看代码: public class Test { public static void main(String[] args) { System.out.println(0.4 ...

  3. Linux 网络设备驱动开发(一) —— linux内核网络分层结构

    Preface Linux内核对网络驱动程序使用统一的接口,并且对于网络设备采用面向对象的思想设计. Linux内核采用分层结构处理网络数据包.分层结构与网络协议的结构匹配,既能简化数据包处理流程,又 ...

  4. sql server 批量导出存储过程

    sys.syscomments:包含数据库中每个视图.规则.默认值.触发器.CHECK 约束.DEFAULT 约束和存储过程的项.text 列包含原始的 SQL 定义语句.(简单点说,这个系统表存储了 ...

  5. Servlet对文件的读写操作

    (1)怎样在serlvet中读取文件的内容 package com.tsinghua; import java.io.*; import javax.servlet.http.*; public cl ...

  6. linux apache服务器优化建议整理(很实用)

    转载:http://www.cnblogs.com/zhongbin/archive/2013/06/11/3131865.html 1.apache服务器的time_wait过多 fin_wait1 ...

  7. GTID数据库备份

    rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID] 1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每 ...

  8. 无法加载Dll”ArcGISVersion.dll”:0x8007007E

    在Win7x64位环境下,无法加载Dll"ArcGISVersion.dll":找不到指定的模块 解决方案: 打开项目的属性-生成-常规-目标平台,选择X86. 参考:http:/ ...

  9. linux下重启oracle的方法

    重启监听服务: #su - oracle #lsnrctl stop --关闭监听 #lsnrctl start --启动监听 重启数据库服务: #su - oracle #sqlplus /nolo ...

  10. Spring MVC 使用拦截器 HiddenHttpMethodFilter配置Rest风格的URL

    <!-- 4.使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 --> 详细使用请参考这篇博客:地址:http://blog.csdn.net/ppl ...