常用日期工具
import java.math.RoundingMode;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
* @ClassName: DateUtil
* @Description: 日期公共方法
* @Author: lxl
* @Date: 2022/3/10 15:41
* @Version: 1.0
*/
public class DateUtil {
private static final SimpleDateFormat YMDHMS_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static final SimpleDateFormat YMDHM_SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm");
private static final SimpleDateFormat YMD_SDF = new SimpleDateFormat("yyyy-MM-dd");
private static final String HMS_ZERO = " 00:00:00";
private static final String S_ZERO = ":00";
/**
* @Description: 根据当前时间获取查询时间
* @Author: lxl
* @CreateDate: 2022/3/10 15:56
* @Version: 1.0
*/
public static Map<String, String> getDateMap(Date now, Integer type){
Map<String, String> dateMap = new HashMap<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date startDate;
Date startTime;
Date endDate;
Long num = getMinute(type);
try {
endDate = sdf.parse(sdf.format(now));
startDate = new Date(endDate.getTime() - num*60*1000);
startTime = new Date(endDate.getTime() - num*60*1000 - 60*1000);
} catch (ParseException e) {
e.printStackTrace();
startDate = new Date(new Date().getTime() - num*60*1000);
startTime = new Date(new Date().getTime() - num*60*1000 - 60*1000);
endDate = new Date();
}
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateMap.put("startTime", sdf.format(startTime));
dateMap.put("startDate", sdf.format(startDate));
dateMap.put("endDate", sdf.format(endDate));
return dateMap;
}
/**
* @Description: 获取对应分钟数
* @Author: lxl
* @CreateDate: 2022/3/10 19:10
* @Version: 1.0
*/
public static Long getMinute(Integer type){
if(type == 1) {
return 1L;
} else if(type == 2) {
return 10L;
} else if(type == 3) {
return 30L;
} else if(type == 4) {
return 60L;
} else if(type == 5) {
return 24*60L;
}
return 1L;
}
/**
* @Description: 获取前一天的时间
* @Author: lxl
* @CreateDate: 2022/3/10 16:09
* @Version: 1.0
*/
public static String getYesterday(String now){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date yesterday;
Date nowDate;
try {
nowDate = sdf.parse(now);
yesterday = new Date(nowDate.getTime() - 24*60*60*1000);
} catch (ParseException e) {
e.printStackTrace();
yesterday = new Date(new Date().getTime() - 24*60*60*1000);
}
return sdf.format(yesterday);
}
/**
* @Description: 计算比率
* @Author: lxl
* @CreateDate: 2022/3/10 16:19
* @Version: 1.0
*/
public static String accuracy(Integer num, Integer total, int scale){
if(total == 0) {
return "100";
}
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance();
//可以设置精确几位小数
df.setMaximumFractionDigits(scale);
//模式 例如四舍五入
df.setRoundingMode(RoundingMode.HALF_UP);
double accuracy_num = (double) num/total * 100;
return df.format(accuracy_num);
}
/**
* @Description: 获取当前时间
* @Author: lxl
* @CreateDate: 2022/3/10 10:19
* @Version: 1.0
*/
public static String getNowTime(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
/**
* @Description: 获取n天前查询时间
* @Author: lxl
* @CreateDate: 2022/3/10 16:45
* @Version: 1.0
*/
public static Map<String, String> getNDate(Integer num){
Date day = new Date(System.currentTimeMillis() - num*24*60*60*1000);
Map<String, String> dateMap = new HashMap<>();
dateMap.put("statsDate", YMD_SDF.format(day));
dateMap.put("startDate", YMD_SDF.format(day) + " 00:00:00");
dateMap.put("endDate", YMD_SDF.format(day) + " 23:59:59");
return dateMap;
}
/**
* @Description: 获取当天查询时间 半小时
* @Author: lxl
* @CreateDate: 2022/3/10 15:56
* @Version: 1.0
*/
public static Map<String, String> getTodayMap(Date now){
Map<String, String> dateMap = new HashMap<>();
Date startTime = new Date(now.getTime() - 30*60*1000);
dateMap.put("statsDate", YMD_SDF.format(startTime));
dateMap.put("startDate", YMD_SDF.format(startTime) + HMS_ZERO);
dateMap.put("endDate", YMDHM_SDF.format(now) + S_ZERO);
return dateMap;
}
/**
* 获取查询时间 前半小时 - 一小时
* @author lxl on 2022/3/10 14:13
*/
public static Map<String, String> getBeforeHalfDateTime(Date date) {
Map<String, String> dateMap = new HashMap<>();
Date startTime = new Date(date.getTime() - 70*60*1000);
Date endTime = new Date(date.getTime() - 30*60*1000);
dateMap.put("startTime", YMDHM_SDF.format(startTime) + ":00");
dateMap.put("endTime", YMDHM_SDF.format(endTime) + ":00");
return dateMap;
}
/**
* @Description: md5加密
* @Author: lxl
* @CreateDate: 2022/3/10 13:55
* @Version: 1.0
*/
public static String md5(String source) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
md.update(source.getBytes());
byte[] tmp = md.digest();
char[] str = new char[16 * 2];
int k = 0;
for (int i = 0; i < 16; i++) {
byte byte0 = tmp[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
/**
* @Description: 业务流水号
* @Author: lxl
* @CreateDate: 2022/3/10 11:42
* @Version: 1.0
*/
public static String makeNum() {
Random rm = new Random();
String num = rm.nextInt(9999999) + "";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 7 - num.length(); i++) {
sb.append("0");
}
num = sb.toString() + num;
String n = new SimpleDateFormat("yyHHmmssSSS").format(new Date());
return n+num;
}
// public static void main(String[] args) {
// System.out.println(getYesterday("2020-06-01 10:00:00"));
// System.out.println(getBeforeHalfDateTime(new Date()));
// }
/**
* 获取昨天的时间范围
* @return
*/
public static DateRangeDto getYesterdayRange() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.DAY_OF_MONTH, -1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.DAY_OF_MONTH, -1);
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
private static void setMinTime(Calendar calendar){
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
private static void setMaxTime(Calendar calendar){
calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
}
public static String dateFormatyMdHms(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
/**
* description:获取某天某时某分某秒的时间
*
* @date: 2022/03/09
*/
public static String packingTime(Integer day,Integer hour,Integer minute,Integer second){
Calendar calendar = new GregorianCalendar();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, day);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
Date newUnpackingTime = calendar.getTime();
return dateFormatyMdHms(newUnpackingTime);
}
/**
* 获取date的月份的时间范围
* @param date
* @return
*/
public static DateRangeDto getMonthRange(Date date) {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(date);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMaxTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取当前季度的时间范围
* @return current quarter
*/
public static DateRangeDto getThisQuarter() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取当前月份的时间范围
* @return
*/
public static DateRangeDto getThisMonth(){
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取上个月的时间范围
* @return
*/
public static DateRangeDto getLastMonth(){
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.MONTH, -1);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.MONTH, -1);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
/**
* 获取上个季度的时间范围
* @return
*/
public static DateRangeDto getLastQuarter() {
Calendar startCalendar = Calendar.getInstance();
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
Calendar endCalendar = Calendar.getInstance();
endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2);
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
setMaxTime(endCalendar);
return new DateRangeDto(startCalendar.getTime(), endCalendar.getTime());
}
public final static String DEFAULT_PATTERN = "MM/dd/yyyy HH:mm:ss";
public static String format(Date date){
SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_PATTERN);
return sdf.format(date);
}
}
时间范围实体类:DateRangeDto
import java.util.Date;
public class DateRangeDto {
private Date start;
private Date end;
public DateRangeDto(Date start, Date end) {
this.start = start;
this.end = end;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this.start = start;
}
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this.end = end;
}
}