java计算两时间段的交集

遇到一个问题,比较苦恼没有较好的计算方法去解决。具体是这样,有两个时间段,根据这两个时间段的交集和非交集部分,拆分出至多三个时间段。当时就用了最基础最笨的方法,两个时间段的起止时间相互比较区分多种情况进行拆分。不知道各位有没有遇到过相似的问题,或者有更好的解决方法。

可以用两个list对应两个时间段,并对两个list排序,确保list从小到大排序。然后用list.retainAll(Collection<?>)方法获得两个list的交集listMiddle。
遍历两个list,把比listMiddle.get(0)小的放在listBefore,把比listMiddle.get(listMiddle.size()-1)大的放在listAfter。
listBefore, listMiddle, listAfter就是你要的三个时间段。

基本思路是这样,可能还要加一些if判断,比如交集是否存在之类的。

比如第一个时间段是1月1日至1月31日,第二个时间段是 1月10日至1月15日,结果是要拆分成3段,1: 1月1日至9日, 2: 1月10日至15日,3: 1月16日至31日。

集合1原始数据===========
[2018-05-02 14:56:00,2018-05-02 14:56:06]
集合1原始数据===========
集合2原始数据===========
[2018-05-02 14:56:02,2018-05-02 14:56:07]
集合2原始数据===========
交集解法=====2个时间段List的交集=========开始============
resultList==[[starttime=2018-05-02 14:56:02, endtime=2018-05-02 14:56:06]]
交集解法=====2个时间段List的交集=========结束============

并集解法=====2个时间段List的并集=========开始============
[2018-05-02 14:56:00,2018-05-02 14:56:06]
并集解法=====2个时间段List的并集=========结束============