package com.stylefeng.guns.modular.system.util;
|
|
import com.stylefeng.guns.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<String, Date> getStartAndEndDate(Date time){
|
if(ToolUtil.isEmpty(time)){
|
return null;
|
}
|
Map<String, Date> 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<String, Date> 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<Date> getStartAndEndDate(String time, String split){
|
if(ToolUtil.isEmpty(time) || ToolUtil.isEmpty(split)){
|
return null;
|
}
|
List<Date> 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<String, Date> 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<String, Date> map = new HashMap<>();
|
map.put("startTime", start);
|
map.put("endTime", end);
|
return map;
|
}
|
}
|