package com.agentdriving.user.modular.system.util; import com.agentdriving.user.core.util.ToolUtil; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * 日期处理工具类 */ @Component public class DateUtil { /** * 获取给定日期天的开始时间点或结束时间点 * @param time 日期 * @param type 时间点类型start一天的开始时间点,end一天的结束时间点 * @return */ public Date getStartOrEndDate(Date time, String type){ if(ToolUtil.isEmpty(time) || ToolUtil.isEmpty(type)){ return null; } int hourOfDay = "start".equals(type) ? 0 : 23; int minute = "start".equals(type) ? 0 : 59; int second = "start".equals(type) ? 0 : 59; int millisecond = "start".equals(type) ? 0 : 999; Calendar s = Calendar.getInstance(); s.setTime(time); s.set(s.get(Calendar.YEAR), s.get(Calendar.MONTH), s.get(Calendar.DAY_OF_MONTH), hourOfDay, minute, second); s.set(Calendar.MILLISECOND, millisecond); return s.getTime(); } /** * 获取给定日期天的起始时间和结束时间 * @param time * @return */ public Map getStartAndEndDate(Date time){ if(ToolUtil.isEmpty(time)){ return null; } Map map = new HashMap<>(); map.put("startTime", getStartOrEndDate(time, "start")); map.put("endTime", getStartOrEndDate(time, "end")); return map; } /** * 获取格式化的字符串日期返回日期天的起始时间和结束时间 * @param time yyyy-MM-dd DD:mm:ss/yyyy-MM-dd * @return */ public Map getStartAndEndDate(String time){ if(ToolUtil.isEmpty(time)){ return null; } int index = time.indexOf(" "); String pattern = "yyyy-MM-dd DD:mm:ss"; if(index == -1){ pattern = "yyyy-MM-dd"; } SimpleDateFormat sdf = new SimpleDateFormat(pattern); Date date = null; try { date = sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } return getStartAndEndDate(date); } /** * 获取格式化的字符串区间日期返回区间日期天的起始时间和结束时间 * @param time yyyy-MM-dd DD:mm:ss - yyyy-MM-dd DD:mm:ss/yyyy-MM-dd - yyyy-MM-dd * @param split 区间时间的分隔符 * @return */ public List getStartAndEndDate(String time, String split){ if(ToolUtil.isEmpty(time) || ToolUtil.isEmpty(split)){ return null; } List list = new ArrayList<>(); String[] split1 = time.split(split); int index = split1[0].indexOf(" "); String pattern = "yyyy-MM-dd DD:mm:ss"; if(index == -1){ pattern = "yyyy-MM-dd"; } SimpleDateFormat sdf = new SimpleDateFormat(pattern); Date date1 = null; Date date2 = null; try { date1 = sdf.parse(split1[0]); date2 = sdf.parse(split1[1]); } catch (ParseException e) { e.printStackTrace(); } list.add(getStartOrEndDate(date1, "start")); list.add(getStartOrEndDate(date2, "end")); return list; } /** * 获取月初和月末日期 * @param date * @return */ public Map getMonthStartAndEnd(Date date){ Calendar s = Calendar.getInstance(); s.setTime(date); s.set(Calendar.DAY_OF_MONTH, 1); Calendar e = Calendar.getInstance(); e.setTime(date); e.set(Calendar.DAY_OF_MONTH, e.getActualMaximum(Calendar.DAY_OF_MONTH)); Date start = this.getStartOrEndDate(s.getTime(), "start"); Date end = this.getStartOrEndDate(e.getTime(), "end"); Map map = new HashMap<>(); map.put("startTime", start); map.put("endTime", end); return map; } }