求多个⽇期时间段的并集-java
说⼀下需求:
多个含有startTime,endTime的时间段,处理后取出并集,最后的格式为yyyy/MM/dd,如果中间有断,⽤逗号隔开,例如 2019/06/01-2019/08/01,2019/10/01-2019/10/20
场景准备:
先模拟⼀个对象,⾥⾯存储startTime,endTime;
@Data
public class MyDate(){
private Date startTime;
private Date endTime;
}
放⼊数据:
这⾥就模拟⼀种情况吧,有⼼的同学可以多试试其他的情况
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
List<MyDate> dateList = new ArratList<MyDate>();
MyDate myDate1 = new MyDate();
myDate1.setStartTime(sdf.parse("2019/08/01"));
myDate1.setEndTime(sdf.parse("2019/09/01"));
MyDate myDate2 = new MyDate();
myDate2.setStartTime(sdf.parse("2019/08/15"));
myDate2.setEndTime(sdf.parse("2019/09/15"));
dateList.add(myDate1);
dateList.add(myDate2);
上⾯的数据应该是各位都已经有的,我简单的模拟了出来,现在
正⽚开始
public String getDateFormat(List<MyDate> dateList){
//求出多个时间的并集
HashMap<Date, Date> dateMap = new HashMap<>();
for (MyDate mydate : dateList) {
java时间日期格式转换Date startTime = StartTime();
Date endTime = EndTime();
//第⼀个时间
if (MapUtils.isEmpty(dateMap)) {
dateMap.put(startTime, endTime);
}
HashMap<Date, Date> tempMap = new HashMap<>();
Iterator<Map.Entry<Date, Date>> iterator = Set().iterator();
while (iterator.hasNext()) {
Map.Entry<Date, Date> entry = ();
Date start1 = Key();
Date end1 = Value();
if (startTime.after(end1) || endTime.before(start1)) {
tempMap.put(startTime, endTime);
} else if (startTime.before(start1) && endTime.before(end1)) {
tempMap.put(startTime, end1);
} else if (startTime.before(start1) && endTime.before(end1)) {
tempMap.put(startTime, endTime);
} else if (startTime.before(end1) && endTime.after(end1)) {
tempMap.put(start1, endTime);
}
}
dateMap.putAll(tempMap);
}
StringBuilder sb = new StringBuilder();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
dateMap.forEach((k, v) -> {
sb.append(sdf.format(k) + "-" + sdf.format(v) + ",");
});
return sb.deleteCharAt(sb.length() - 1).toString();
}
代码写的匆忙,有很多可以优化的地⽅,不过基本的功能能实现,有时间再改吧,希望能帮助到各位!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论