如何获取两个时间段中重合的部分

本文介绍了一种通过Java实现的日期区间重叠计算方法。利用SimpleDateFormat解析日期,并通过比较两个日期区间的开始和结束时间来确定它们是否重叠及重叠范围。

如何获取两个时间段中重合的部分

——如何获取两个数字区间重叠的部分
原理不说了,一看代码便知逻辑

package main.utill;

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

/**
 * 
 * @author <a href= 'http://www.wlgdo.com'>com.wlgdo</a>[wangligang<a>wlgchun@163.com</a>]
 * @date 2017年5月14日
 * @date 2017-05-14 21:54:18
 */
public class DateUtilz {

    /*
     * 需求描述: 现有两个日期段,格式是:yyyy-MM-dd HH:MM:ss,日期前后未定,系统需要判断出这两个日期的前后顺序, 取出这两个日期的重合日期
     */

    /**
     * 
     * @author <a href="http://www.wlgdo.com">com.wlgdo</a>[<a href=
     *         'wlgchun@163.com'>wangligang</a>]
     * @date 2017-05-14 21:58:02
     * @param args
     *            void
     */
    public static void main(String[] args) {
        getAlphalDate();
    }

    public static void getAlphalDate() {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            // 标准时间
            Date bt = sdf.parse("2017-11-11 00:00:00");
            Date ot = sdf.parse("2017-11-11 00:00:00");
            // 目标时间
            Date st = sdf.parse("2017-11-11 00:00:00");
            Date ed = sdf.parse("2017-11-11 00:00:00");

            long btlong = Math.min(bt.getTime(), ot.getTime());// 开始时间
            long otlong = Math.max(bt.getTime(), ot.getTime());// 结束时间
            long stlong = Math.min(st.getTime(), ed.getTime());// 开始时间
            long edlong = Math.max(st.getTime(), ed.getTime());// 结束时间

            // 具体算法如下
            // 首先看是否有包含关系
            if ((stlong >= btlong && stlong <= otlong) || (edlong >= btlong && edlong <= otlong)) {
                // 一定有重叠部分
                long sblong = stlong >= btlong ? stlong : btlong;
                long eblong = otlong >= edlong ? edlong : otlong;
                System.out.println("包含的开始时间是:" + sdf.format(sblong) + "-结束时间是:" + sdf.format(eblong));
                return;
            }
            System.out.println("无重叠的时间段:{单身妹子看过来!}");
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

有问题的同学可以直接Mail我或者评论区提问,随时跟大家沟通。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值