首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

如何判断时间安排范围是否包含

2012-08-07 
怎么判断时间安排范围是否包含?这些是某个用户要参加的多场考场的考试安排时间,时间安排冲突我想在详细页

怎么判断时间安排范围是否包含?
这些是某个用户要参加的多场考场的考试安排时间,时间安排冲突我想在详细页标记红色。

1、开始时间2012-07-02 08:00 结束时间2012-07-02 09:00 
2、开始时间2012-07-02 08:40 结束时间2012-07-02 10:00
3、开始时间2012-07-02 09:05 结束时间2012-07-02 09:45 
4、开始时间2012-07-02 10:00 结束时间2012-07-02 11:00 


java怎么判断这多组时间,是否有包含关系? 就是怎么比较时间冲突?我菜鸟,跪求帮助。






[解决办法]

Java code
import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;public class Test {    @SuppressWarnings({ "rawtypes", "unchecked" })    public static void main(String[] args) throws Exception{        Map examtimemap = new HashMap<String, String>();        examtimemap.put("starttime1","2012-07-02 08:00");        examtimemap.put("endtime1","2012-07-02 09:00");        examtimemap.put("starttime2","2012-07-02 08:40");        examtimemap.put("endtime2","2012-07-02 10:00");        examtimemap.put("starttime3","2012-07-02 09:05");        examtimemap.put("endtime3","2012-07-02 09:45");        examtimemap.put("starttime4","2012-07-02 10:00");        examtimemap.put("endtime4","2012-07-02 11:00");        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");        for(int i = 1 ; i < 4;i++){            Date endtimei = sdf.parse(examtimemap.get("endtime" + i).toString());            for(int j = i + 1;j < 5;j++){                Date startTimej = sdf.parse(examtimemap.get("starttime" + j).toString());                if(endtimei.compareTo(startTimej) > 0){                    System.out.println("时间" + j + "与时间" + i + "有冲突");                    break;                }            }                    }    }}
[解决办法]
伪代码

Java code
首先创建一个class(TestTime)里面存放这几个成员。String className;//科目名称Date startTime;//开始时间Date endTime;//结束时间声明一个List集合:List<TestTime> list = new ArrayList(TestTime)();然后有几门课程就去创建几个TestTime对象,并实例化,然后添加到List集合中。再然后就遍历这个List集合:for(int i = 0; i < list.size(); i++){    for(int j = i+1; j < list.size(); j++){        //这里将遍历的对象list.get(i)的endTtime和list.get(j)的startTime比较一下就OK了。    }}
[解决办法]
Java code
public static boolean isDate( Date[] date , Date[] dates){                if(date[0].getTime()>dates[0].getTime()){            if(date[0].getTime()<dates[1].getTime()){                return false;            }        }        if(date[0].getTime()<dates[0].getTime()){            if(date[1].getTime()>dates[0].getTime()){                return false;            }        }        if(date[0].getTime()==dates[0].getTime()){                return false;        }        return true ;    }      public static void main(String[] args) throws ParseException {        Map<String, String[]> examtimemap = new LinkedHashMap<String, String[]>();//有序的Map        examtimemap.put("date",new String []{"2012-07-02 08:00","2012-07-02 08:00"});        examtimemap.put("date2",new String []{"2012-07-02 08:40","2012-07-02 10:00"});        examtimemap.put("date3",new String []{"2012-07-02 09:05","2012-07-02 09:45"});        examtimemap.put("date4",new String []{"2012-07-02 10:00","2012-07-02 11:00"});        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm") ;        int i = 0, i2=0 ; ;        for (String key : examtimemap.keySet()) {                    for (String key2 : examtimemap.keySet()){                if(i2>i){                                    String [] dates =    examtimemap.get(key) ;                String [] dates2 =    examtimemap.get(key2) ;                Date[]  date = {dateFormat.parse(dates[0]) ,dateFormat.parse(dates[1])} ;                Date[]  date2 = {dateFormat.parse(dates2[0]) ,dateFormat.parse(dates2[1])} ;             if(!isDate( date , date2)){                 System.out.println(key +"和"+key2 + "时间有冲突");             }                }                i2= i2+1 ;            }            i=i+1 ;            i2 = 0;        }             } 


[解决办法]
少了关键的一部 先对list进行开始时间排序然后再用结束时间和下一个的开始时间比这样会比较好点

探讨

5L哥们好快啊。咱思路一样.....

热点排行