比如说现在数据库里 开始时间08:30 结束时间10:30
                           13:30         15:30
                           17:30         19:30
                             .             .
                             .             .
                             .             .
不一定是三组数据
我现在要插入一个时间段 开始时间 a 和结束时间 b
这个时间段不能在库中任何一个时间段里 或者不能出现交叉现象
请高手解答!

解决方案 »

  1.   

    看了一下题目,想到一种思路,觉得可以试试,在本机上调试通过.不过仅限于验证时间是否和已经存在的时间段有重叠,这也是你题目标题要求的,没有算出空闲的时间段,不过我相信你看了这段代码以后,要算出空闲时间段也是很容易的一件事.代码我就不写了.这段代码仅仅实现了功能,健壮性不行,如果觉得可以采纳,你自己加几个判断进去罗.. 觉得不好不要拍砖....package com.ce.exam;import java.util.ArrayList;
    import java.util.List;public class TimeInsert { /**
     * @param args
     */
    public static void main(String[] args) {
    String str1 = "13:35";
    String str2 = "15:25";
    List<String> listB = new ArrayList<String>();
    List<String> listE = new ArrayList<String>();
    listB.add("09:38");
    listE.add("12:35");

    listB.add("14:00");
    listE.add("17:32");
    TimeInsert ti = new TimeInsert();
    System.out.println(ti.insertValidate(str1, str2, listB, listE)); }

    public boolean insertValidate(String beginDate,String endDate,List<String> beginDateList,List<String> endDateList){
    Integer begin = trimChar(beginDate);
    Integer end = trimChar(endDate);
    List<Integer> beginList  = new ArrayList<Integer>();
    List<Integer> endList = new ArrayList<Integer>();
    for(int i = 0 ; i < beginDateList.size();i++){
    beginList.add(trimChar(beginDateList.get(i)));
    endList.add(trimChar(endDateList.get(i)));//一个开始时间对应一个结束时间
    }
    for(int i = 0 ; i < endList.size() ; i ++){
    //时间有重叠有三种情况:
    //1.插入时间的开始时间小于已经存在的一段时间的开始时间,但结束时间位于开始时间和结束时间之间(重叠)
    //2.插入时间的开始时间小于已经存在的一段时间的开始时间,但结束时间大于结束时间(全包含)
    //3.插入时间的开始时间大于一段已经存在的时间的开始时间,但是却小于这段时间的结束时间,且结束时间大于这段时间的结束时间
    //画一个时间图,可以总结出:他们都是开始时间小于已经存在的一段时间的结束时间,但结束时间大于这段时间的开始时间
    if(begin < endList.get(i) && end > beginList.get(i)){
    return false; //存在重叠
    }
    }

    return true;
    } //刚时间转换成整型
    public Integer trimChar(String str){
    int index = str.indexOf(":");
    String newString =  str.substring(0,index) + str.substring(index+1,str.length());
    return Integer.parseInt(newString);
    }
    }
      

  2.   

    进行空间建立模型发现,开始时间和结束时间是一对空间时间点point(x,y)x范围(开始时间,终止时间)
    y范围(开始时间,终止时间)原来是一个正方形的平面图像,那插入的时间点不再这个正方形中你说是什么情况呢?起始时间大于终止时间即可了吧!如果无序,大于MAX(点序列就行了)换成sql
    insert 内容 into table name select fields from tablename where not exists(
    加入select判断应该就行了!传入插入值