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

 我来答
杜福忠
2017-07-14 · 分享爱好者。成人达己。
杜福忠
采纳数:110 获赞数:301

向TA提问 私信TA
展开全部
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);
         
    }

分享~

boss_jian
推荐于2018-01-18
知道答主
回答量:2
采纳率:100%
帮助的人:2364
展开全部
DateFormat d_Fm = new SimpleDateFormat("yyyy-MM-dd HH:mm");

Date suspendTime = d_Fm.parse("2017-12-26 07:59:00");
Date resumeTime = d_Fm.parse("2017-12-28 07:59:00");

Date leftDate= d_Fm.parse("2017-12-28 07:59:00");
Date rightDate= d_Fm.parse("2017-12-29 07:59:00");
//判断两个时间段是否有交集
if((suspendTime.getTime() <= leftDate.getTime() || suspendTime.getTime() <rightDate.getTime())
&& ((resumeTime.getTime() >leftDate.getTime() || resumeTime.getTime() >= rightDate.getTime()))){
System.out.println("true");
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
育知同创教育
2017-01-01 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
代码如下
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;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式