发际线茂密的程序员
2016-07-13 16:22
采纳率: 0%
浏览 4.6k

java计算两时间段的交集

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

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

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

    评论
    解决 无用
    打赏 举报
  • import_java_any 2016-07-15 07:14

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

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

    评论
    解决 无用
    打赏 举报
  • chalklee666 2021-01-20 11:36

    集合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的并集=========结束============

     

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题