package com.hotent.Calendar.util; import java.time.LocalDateTime; import java.util.Calendar; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import com.hotent.Calendar.model.TimePeroid; import com.hotent.base.util.time.TimeUtil; /** * 日历工具类 * @author hjx * */ public class CalendarUtil { /** * 默认结束时间向后推30天 * @author hjx * @version 创建时间:2014-2-24 下午2:44:42 * @param startTime * @return */ public static LocalDateTime getDefaultEndDate(LocalDateTime startTime){ return TimeUtil.getNextDays(startTime,30); } /** * list转SortedMap * SortedMap保证 key不重复 * SortedMap保证了时间段的顺序 * @author hjx * @version 创建时间:2014-2-24 上午11:54:14 * @param list * @return */ public static SortedMap getTimePeroidMap(List list) { if(list==null||list.size()<=0)return null; SortedMap timePeroidMap=new TreeMap(); for(TimePeroid timePeroid :list){ if(timePeroid!=null) timePeroidMap.put(timePeroid.getStartDate(), timePeroid); } return timePeroidMap; } /** * 根据sortedMap 合计所有时间段的时间总和 * @author hjx * @version 创建时间:2014-2-24 下午2:22:51 * @param sortedMap * @return */ public static long getCountTimePeroid(SortedMap sortedMap) { if(sortedMap==null|| sortedMap.size()==0)return 0; long countTime = 0; // map遍历 Iterator> iter = sortedMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object val = entry.getValue(); long tmpTime = ((TimePeroid) val).getTime(); countTime += tmpTime; } return countTime; } /** * 根据时长 和上班时段列表sortedMap,计算任务完成时间 * @author hjx * @version 创建时间:2014-2-24 下午2:22:51 * @param sortedMap * @return * @throws Exception */ public static LocalDateTime getEndTime(SortedMap sortedMap,long time) throws Exception { long millisecond=time*60*1000; long countTime = 0; TimePeroid timePeroid=new TimePeroid(); // map遍历 Iterator> iter = sortedMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object val = entry.getValue(); timePeroid=(TimePeroid) val; long tmpTime = timePeroid.getTime(); countTime += tmpTime; if(countTime>=millisecond) break; } //所有的时间段都加完了仍不够,则返回null,系统要重新计算endtime,再后推一个月 if(countTime