需求:任意几段时间,比如 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));
}
}
大家扫码关注一下公众号 智程科技 ,回复 “时间合并” 即可免费领取所有源码哦