如何判断日期交叉已知,两个日期段,如2008-1-1至2008-1-10这是一个日期段,
另一个日期段为2008-1-5至2008-1-15
如何得出重复日期为2008-1-5至2008-1-10
多出来的部分为2008-1-10至2008-1-15
被删除的部分为2008-1-1至2008-1-5如何设计这样的函数?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【kkun_3yue3】截止到2008-08-01 14:44:27的历史汇总数据(不包括此帖):
    发帖的总数量:224                      发帖的总分数:6462                     每贴平均分数:28                       
    回帖的总数量:2286                     得分贴总数量:1061                     回帖的得分率:46%                      
    结贴的总数量:224                      结贴的总分数:6462                     
    无满意结贴数:14                       无满意结贴分:82                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:6.25  %               无满意结分率:1.27  %                  
    敬礼!

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=kkun_3yue3
      

  2.   


    两个字段保存,BeginDate,EndDate
    希望能看到代码,,,,新手上路
      

  3.   

    Date [] time_1 = new Date[2];
    Date [] time_2 = new Date[2];

    time_1[0] = new Date(java.sql.Timestamp.valueOf("2008-01-01 00:00:00").getTime());
    time_1[1] = new Date(java.sql.Timestamp.valueOf("2008-01-10 00:00:00").getTime());

    time_2[0] = new Date(java.sql.Timestamp.valueOf("2008-01-05 00:00:00").getTime());
    time_2[1] = new Date(java.sql.Timestamp.valueOf("2008-01-15 00:00:00").getTime());

    int overstep =  time_2[1].getDate()-time_1[1].getDate();
    int discarded = time_2[0].getDate()-time_1[0].getDate();
    int iterant = time_1[1].getDate()-time_2[0].getDate();
      

  4.   

    begindate1 begindate2
    enddate1 enddate2明白吧?HashMap decodes(String b1,String e1,String b2,String e2)
    {
       if(b1>e2||b2>e1)  //没有交集
       {
         if(b1>e2)
         {
           //你准备怎么办?
         }
         else
         {
           //你准备怎么办?
         }
       }
       else
       {
         if(b1<=e2)
         {
           if(b1>=b2)
           {
             if(e1<=e2)
             {
               //交集是b1-e1
             }
             else
             {
               //交集是b1-e2
             }
           }
           else
           {
             if(e1<=e2)
             {
               //交集是b2-e1
             }
             else
             {
               //交集是b2-e2
             }
           }
         }
         if(b2<=e1)
         {
           if(b2>=b1)
           {
             if(e1<=e2)
             {
               //交集是b2-e1
             }
             else
             {
               //交集是b2-e2
             }
           }
           else
           {
             if(e1<=e2)
             {
               //交集是b1-e1
             }
             else
             {
               //交集是b1-e2
             }
           }
         }
       }    
    }
      

  5.   

    时间段A:start:2008-1-1 end :2008-1-10
    时间段B: start:2008-1-5 and :2008-1-15
    分析:A与B只可能出现三种情况:1、相交;2、相离;3、包含;
    写一方法判断出A与B的关系。
    如果是相交则相交的时间为:小时间的end->大时间的start
    如果是包含则为:小时间的start->小时间的end
    如果是相离则没有时间交叉。问题分析至此可以得知问题的关键在于如何判断这两个时间段的关系。一会我试试看能否做出来,如果做出来把代码贴进进来。我也是新手,呵呵
      

  6.   

    public class TestNumber {
        
        public String decodeNumber(int start1,int end1,int start2,int end2){
            //相离
            if(start1>end2||start2>end1){
                return "相离";
            }else if(start1<=start2&&end1>=end2){
                return "包含,相交的部分为:"+bh(start1, end1, start2, end2);
            }else{
                return "两个数相交,相交的部分为:"+sj(start1, end1, start2, end2);
            }
        }
        
        //相交
        public static String sj(int start1,int end1,int start2,int end2){
            String str=null;
            if(end1>start2){
                str=start2+"到"+end1;
            }else{
                str=start1+"到"+end2;
            }
            return str;
        }
        
        //包含
        public static String bh(int start1,int end1,int start2,int end2){
            String str=null;
            if(start1<=start2){
                str=start1+"到"+end1;
            }else{
                str=start2+"到"+end2;
            }
            return str;
        }
        
        public static void main(String [] agrs){
            TestNumber tn=new TestNumber();
            String s=tn.decodeNumber(1, 6, 4, 10);
            System.out.println(s);
        }
    }这是两个数的判断,如果是两个日期还是先把日期转成数字吧。好像日期是可以比较大小的,只是我暂时忘了,不好意思。留给其它人的解决吧。
      

  7.   

    修正了一下代码,刚才的代码有点bug:修正如下
    public class TestNumber {
        
        //判断两组数的关系
        public String decodeNumber(int start1,int end1,int start2,int end2){
            if(start1>end2||start2>end1){
                return "相离";
            }else if(start1<=start2&&end1>=end2){
                return "包含,相交的部分为:"+bh(start1, end1, start2, end2);
            }else{
                return "两个数相交,相交的部分为:"+sj(start1, end1, start2, end2);
            }
        }
        
        //相交
        public static String sj(int start1,int end1,int start2,int end2){
            String str=null;
            if(start1<=start2){
                str=start2+"到"+end1;
            }else{
                str=start1+"到"+end2;
            }
            return str;
        }
        
        //包含
        public static String bh(int start1,int end1,int start2,int end2){
            String str=null;
            if(start1<=start2){
                str=start2+"到"+end2;
            }else{
                str=start1+"到"+end1;
            }
            return str;
        }
        
        public static void main(String [] agrs){
            TestNumber tn=new TestNumber();
            //相交
            String s=tn.decodeNumber(3, 10,1, 6);
            //相离
            String s2=tn.decodeNumber(1, 5, 15, 110);
            //包含
            String s3=tn.decodeNumber(1, 15, 10, 13);
            System.out.println(s);
            System.out.println(s2);
            System.out.println(s3);
            
        }
    }