获得用户的一些工作时间段,需要把重复的和首尾相连的合并。这个方法就是合并的,去重复的。
如果有同学有好的方式可以提出来,一块学习
/**
* 合并时间段去掉重复的
*
* 时间合并 12:00:00----13:00:00 & 12:30:00 --- 14:00:00 =====》 12:00:00----14:00:00
* @param usertime
*/
public static void unionTime(List<UserTime> usertime){
//顺序timesixth在最后,不可以改其他的可以改
/*List<UserTime> usertime = new ArrayList<UserTime>();
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm");
UserTime ut = new UserTime(1, sdf.parse("12:00"), sdf.parse("13:00"));
UserTime ut2 = new UserTime(1, sdf.parse("12:30"), sdf.parse("15:00"));
UserTime ut3 = new UserTime(1, sdf.parse("16:00"), sdf.parse("19:00"));
usertime.add(ut);
usertime.add(ut2);
usertime.add(ut3);*/
timesixth(usertime);
}
private static void timesixth(List<UserTime> usertime) {
for(int i=0;i<usertime.size()-1;i++){
int j=i+1;
if(usertime.get(i).getUserid()==usertime.get(j).getUserid()){
if(usertime.get(i).getEnd().after(usertime.get(j).getStart())
&& usertime.get(i).getStart().before(usertime.get(j).getStart())
&&usertime.get(i).getEnd().before(usertime.get(j).getEnd())
){
// |-----------|
// |---------|
usertime.get(j).setStart(usertime.get(i).getStart());
usertime.remove(i);
timesixth(usertime);
}else if(usertime.get(i).getEnd().equals(usertime.get(j).getStart())) {
// |------|
// |-----|
usertime.get(j).setStart(usertime.get(i).getStart());
usertime.remove(i);
timesixth(usertime);
}else if(usertime.get(i).getStart().before(usertime.get(j).getStart())
&&usertime.get(i).getEnd().equals(usertime.get(j).getEnd())
){
// |----------| 结尾相等
// |-------|
usertime.remove(j);
timesixth(usertime);
}else if(usertime.get(i).getStart().after(usertime.get(j).getStart())
&&usertime.get(i).getEnd().equals(usertime.get(j).getEnd())){
// |-----| 结尾相等
// |-------|
usertime.remove(i);
}else if(usertime.get(i).getStart().equals(usertime.get(j).getStart())
&&usertime.get(i).getEnd().before(usertime.get(j).getEnd())){
// |------------|
// |--------------|
usertime.remove(i);
timesixth(usertime);
}else if(usertime.get(i).getStart().equals(usertime.get(j).getStart())
&&usertime.get(i).getEnd().after(usertime.get(j).getEnd())){
// |------------|
// |----------|
usertime.remove(j);
timesixth(usertime);
}else if(usertime.get(i).getStart().equals(usertime.get(j).getStart())&&usertime.get(i).getEnd().equals(usertime.get(j).getEnd())){
// |----------|
// |----------|
usertime.remove(i);
timesixth(usertime);
}else if(usertime.get(i).getStart().before(usertime.get(j).getStart())
&&usertime.get(i).getEnd().after(usertime.get(j).getStart())
&& usertime.get(i).getStart().before(usertime.get(j).getEnd())
&&usertime.get(i).getEnd().after(usertime.get(j).getEnd())){
// |----------|
// |-------|
usertime.remove(j);
timesixth(usertime);
}else if(usertime.get(i).getStart().after(usertime.get(j).getStart())
&& usertime.get(i).getEnd().before(usertime.get(j).getEnd())
){
// |------|
// |---------|
usertime.remove(i);
timesixth(usertime);
}else{
}
/* if(usertime.get(i).getEnd().before(usertime.get(i).getStart())){
// |--------|
// |-------|
//不可以动
}*/
}
}
}
public static class UserTime implements Comparable<UserTime>{
public int userid;//用户ID
public String title;//这个是在full calendar插件使用的时候用到,可以忽略
public Date start;//开始时间
public Date end;//结束时间
public UserTime(int userid, Date begintime, Date endtime,String title){
this.userid=userid;
this.start=begintime;
this.end=endtime;
this.title=title;
}
@Override
public int compareTo(UserTime o) {
//先用用户ID排序,最后用时间
if(this.userid!=o.userid)
return this.userid-o.userid;
else{
if(this.start.before(o.end))
return -1;
else
return 1;
}
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public Date getStart() {
return start;
}
public void setStart(Date begintime) {
this.start = begintime;
}
public Date getEnd() {
return end;
}
public void setEnd(Date endtime) {
this.end = endtime;
}
}