java 判断两个时间段是否有交集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 判断两个时间段是否有交集相关的知识,希望对你有一定的参考价值。

public class DateKit
    /**
                    时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 
    * @return 
    */
    public static boolean isContain(Date[] a, Date[] b) 
    
        long astatr = a[0].getTime();
        long aend   = a[1].getTime();
        
        long bstatr = b[0].getTime();
        long bend   = b[1].getTime();
        
        // a0 包在了 b0 ~ b1 之间
        if( astatr>=bstatr && astatr<=bend ) return true;
        
        // b0 包在了 a0 ~ a1 之间
        if( astatr<=bstatr && aend>=bstatr ) return true;
        
        return false;
    
    
    /**
                时间段的比较处理 , 如果包含了传来的 时段 了, 就说明 时间冲突了 , (允许首尾相等而不包含的情况)
    * @return 
    */
    public static boolean isContainEnd(Date[] a, Date[] b) 
    
        long astatr = a[0].getTime();
        long aend   = a[1].getTime();
        
        long bstatr = b[0].getTime();
        long bend   = b[1].getTime();
        
        // a0 包在了 b0 ~ b1 之间
        if( astatr>=bstatr && astatr<bend ) return true;
        
        // b0 包在了 a0 ~ a1 之间
        if( astatr<=bstatr && aend>bstatr ) return true;
        
        // 相等
        if( astatr==bstatr && aend==bend )  return true;
        
        return false;
    
    
    // 功能 工具 扩展
    
        public static boolean isContain(String astatr,String aend, String bstatr,String bend) 
            return isContain(new String[]astatr , aend, new String[]bstatr , bend);
        
        
        public static boolean isContain(String[] aStr, String[] bStr) 
            return isContain(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
        
        
        public static boolean isContain(String[] aStr, String[] bStr, String pattern) 
            final SimpleDateFormat SF = new SimpleDateFormat(pattern);
            try 
                return isContain(new Date[]SF.parse(aStr[0]), SF.parse(aStr[1]) , new Date[]SF.parse(bStr[0]), SF.parse(bStr[1]));
             catch (Exception e) 
                e.printStackTrace();
            
            return false;
        
        
        public static boolean isContainEnd(String astatr,String aend, String bstatr,String bend) 
            return isContainEnd(new String[]astatr , aend, new String[]bstatr , bend);
        
        
        public static boolean isContainEnd(String[] aStr, String[] bStr) 
            return isContainEnd(aStr, bStr, "yyyy-MM-dd HH:mm:ss");
        
        
        public static boolean isContainEnd(String[] aStr, String[] bStr, String pattern) 
            final SimpleDateFormat SF = new SimpleDateFormat(pattern);
            try 
                return isContainEnd(new Date[]SF.parse(aStr[0]), SF.parse(aStr[1]) , new Date[]SF.parse(bStr[0]), SF.parse(bStr[1]));
             catch (Exception e) 
                e.printStackTrace();
            
            return false;
        
    

测试:

 public static void main(String[] args) throws ParseException 
        final SimpleDateFormat SF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        
        Date[] a = SF.parse("2017-07-06 11:53:00"), SF.parse("2017-07-06 14:52:00");
        Date[] b = SF.parse("2017-07-06 14:52:00"), SF.parse("2017-07-06 16:52:00");
        
        System.out.println("您好, 智能的电脑! 请问:");
        for (Date date : a) 
            System.out.print(date.toString() + " ~  ");
        
        System.out.println("包含:");
        for (Date date : b) 
            System.out.print(date.toString() + " ~  ");
        
        System.out.println("吗?");
        
        boolean ret = DateKit.isContain(a, b);
        System.out.println("o(∩_∩)o 哈哈 ~ 我猜是: " + ret);
        
        ret = DateKit.isContainEnd(a, b);
        System.out.println("o(∩_∩)o 哈哈 ~ 允许首尾相等 我猜是: " + ret);
        
    

找了半天, 没见写的好的. 自己动手写个, 问题是 两个时段,, 大部分人给的是 两个时间点..

参考技术A f((startTime.getTime()<=start.getTime()) &&

endTime.getTime()>=start.getTime()))

return true;

else if((startTime.getTime()>=start.getTime())&&

startTime.getTime()<=endTime.getTime())
return true;
else
return false;
参考技术B package com.test;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
* ClassName:TestNetwork Function: TODO ADD FUNCTION Reason: TODO ADD REASON
*
* @author 田志超
* @version
* @since Ver 1.1
* @Date 2010-4-6 下午01:15:41
*/
public class TestNetwork
public static void main(String[] args)
try
isOverlap("1999/01/01","2999/01/01","3456/01/01","4423/1/24");
catch (Exception e)
// TODO: handle exception\
e.printStackTrace();



public static boolean isOverlap(String date1Begin, String date1End, String date2Begin, String date2End)throws Exception
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date d1b = sdf.parse(date1Begin);
Date d1e = sdf.parse(date1End);
Date d2b = sdf.parse(date2Begin);
Date d2e = sdf.parse(date2End);
if (d1e.compareTo(d2b)>=0) return true;
else return false;

mysql判断两个时间段是否有交集

    //判断两个时间段是否有交集
    private function checkTimeCross($start_time,$end_time){
        $sql = "select id from dkh_recharge_activity where ( status = 1 AND is_del = 0 ) AND ((start_time > {$start_time} AND start_time < {$end_time}) OR     (start_time < {$start_time} AND end_time > {$end_time}) OR (end_time > {$start_time} AND end_time < {$end_time}))";
        $getOne = $this->dkhRechargeActivityModel->baseExecuteSql($sql);

        return $getOne;
    }

 

以上是关于java 判断两个时间段是否有交集的主要内容,如果未能解决你的问题,请参考以下文章

Java判断两个时间段是否有交集

Java 判断两个IP段是否有交集

mysql判断两个时间段是否有交集

Java 求解两个数组的交集

c语言中有没有比较简单的算法来判断两个集合有交集

与 Java AWT 的矩形交集