时间合并算法

需求:任意几段时间,比如 9:00-10:00,11:00-12:00,9:30-11:30,自动输出9:00-12:00;比如 9:00-10:00,11:00-12:00,9:30-10:30,自动输出 9:00-10:30,11:00-12:00

//贴出核心部分代码,供大家参考
static  <T> T  combineDate(List<TimeType> list) {
		Stack<Long> s = new Stack<Long>();
		Stack<Long> e = new Stack<Long>();
        Collections.sort(list, new TimeComparator());
		s.push(0L);
		e.push(0L);
		for (TimeType time : list) {
			if (time.getStartTime().getTime() > e.peek()) {
				s.push(time.getStartTime().getTime());
				e.push(time.getEndTime().getTime());
			} else if (time.getEndTime().getTime() >= e.peek()) {
				e.pop();
				e.push(time.getEndTime().getTime());
			} else if (time.getStartTime().getTime() <= s.peek()) {
				s.pop();
				s.push(time.getStartTime().getTime());
			}
		}
		List<TimeType> tt = new ArrayList<TimeType>();
		while (!s.isEmpty()) {
			if (0 != s.peek() && 0 != e.peek() && (0 != (int)(e.peek() - s.peek()))) {
				tt.add(new TimeType(new Date(s.peek()), new Date(e.peek())));
			}
			s.pop();
			e.pop();
		}
		return (T) tt;
	}
public class Test {
	public static void main(String[] args) throws ParseException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		TimeType t1 = new TimeType(sdf.parse("2000-1-1 0:0:0"),sdf.parse("2000-1-2 12:30:0"));
		TimeType t2 = new TimeType(sdf.parse("2000-1-2 12:0:0"),sdf.parse("2000-1-3 12:0:0"));
		TimeType t3 = new TimeType(sdf.parse("2000-1-3 11:0:0"),sdf.parse("2000-1-4 12:0:0"));
		TimeType t4 = new TimeType(sdf.parse("2000-1-4 11:0:0"),sdf.parse("2000-1-7 12:0:0"));

		List<TimeType> list = new ArrayList<TimeType>();
		list.add(t1);
		list.add(t2);
		list.add(t3);
		list.add(t4);
		
		System.out.println(CombineAction.combineDate(list));
	}
}

大家扫码关注一下公众号 智程科技 回复 “时间合并” 即可免费领取所有源码哦

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值