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;
|
}
|
|
|
|
/**
|
* 多语言时间日期格式转换
|
* @param language 语言编号
|
* @param datetime 标准格式化时间 yyyy-MM-dd
|
* @return
|
*/
|
public static String conversionFormat(Integer language, String datetime){
|
String time = "";
|
String date = datetime;
|
int index = datetime.indexOf(" ");
|
if(index != -1){
|
time = datetime.substring(datetime.indexOf(" ") + 1);
|
date = datetime.substring(0, datetime.indexOf(" "));
|
}
|
String[] split = date.split("-");
|
switch (language){
|
case 2:
|
split[1] = englishMonth(Integer.valueOf(split[1]));
|
datetime = split[1] + " " + split[2] + ", " + split[0];
|
if(index != -1){
|
datetime += " " + time;
|
}
|
break;
|
case 3:
|
split[1] = frenchMonth(Integer.valueOf(split[1]));
|
datetime = split[2] + " " + split[1] + " " + split[0];
|
if(index != -1){
|
datetime += " " + time;
|
}
|
break;
|
}
|
return datetime;
|
}
|
|
|
public static String conversionFormat1(Integer language, String datetime){
|
String time = "";
|
String date = datetime;
|
int index = datetime.indexOf(" ");
|
if(index != -1){
|
time = datetime.substring(datetime.indexOf(" ") + 1);
|
date = datetime.substring(0, datetime.indexOf(" "));
|
}
|
String[] split = date.split("-");
|
//'%m-%d %H:%i'
|
String m = "";
|
switch (language){
|
case 2:
|
m = englishMonth(Integer.valueOf(split[0]));
|
datetime = m + " " + split[1];
|
if(index != -1){
|
datetime += " " + time;
|
}
|
break;
|
case 3:
|
m = frenchMonth(Integer.valueOf(split[0]));
|
datetime = split[1] + " " + m;
|
if(index != -1){
|
datetime += " " + time;
|
}
|
break;
|
}
|
return datetime;
|
}
|
|
|
|
public static String frenchMonth(Integer month){
|
String m = "";
|
switch (month){
|
case 1:
|
m = "Janvier";
|
break;
|
case 2:
|
m = "Février";
|
break;
|
case 3:
|
m = "Mars";
|
break;
|
case 4:
|
m = "Avril";
|
break;
|
case 5:
|
m = "Mai";
|
break;
|
case 6:
|
m = "Juin";
|
break;
|
case 7:
|
m = "Juillet";
|
break;
|
case 8:
|
m = "Août";
|
break;
|
case 9:
|
m = "Septembre";
|
break;
|
case 10:
|
m = "Octobre";
|
break;
|
case 11:
|
m = "Novembre";
|
break;
|
case 12:
|
m = "Décembre";
|
break;
|
default:
|
m = "";
|
break;
|
}
|
return m;
|
}
|
|
|
|
public static String englishMonth(Integer month){
|
String m = "";
|
switch (month){
|
case 1:
|
m = "January";
|
break;
|
case 2:
|
m = "February";
|
break;
|
case 3:
|
m = "March";
|
break;
|
case 4:
|
m = "April";
|
break;
|
case 5:
|
m = "May";
|
break;
|
case 6:
|
m = "June";
|
break;
|
case 7:
|
m = "July";
|
break;
|
case 8:
|
m = "August";
|
break;
|
case 9:
|
m = "September";
|
break;
|
case 10:
|
m = "October";
|
break;
|
case 11:
|
m = "November";
|
break;
|
case 12:
|
m = "December";
|
break;
|
default:
|
m = "";
|
break;
|
}
|
return m;
|
}
|
}
|