package com.project.common.utils;
|
|
import com.project.common.core.domain.model.DateRange;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
import java.lang.management.ManagementFactory;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.*;
|
import java.util.Calendar;
|
import java.util.Date;
|
|
/**
|
* 时间工具类
|
*
|
* @author jinhui
|
*/
|
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
public static String YYYY = "yyyy";
|
|
public static String YYYY_MM = "yyyy-MM";
|
|
public static String YYYY_MM_DD = "yyyy-MM-dd";
|
|
public static String YYYYMMDD = "yyyyMMdd";
|
|
public static String YYMMDD = "yyMMdd";
|
|
|
public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
|
|
|
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
|
private static String[] parsePatterns = {
|
"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
|
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM",
|
"yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"};
|
|
/**
|
* 获取当前Date型日期
|
*
|
* @return Date() 当前日期
|
*/
|
public static Date getNowDate() {
|
return new Date();
|
}
|
|
/**
|
* 获取当前日期, 默认格式为yyyy-MM-dd
|
*
|
* @return String
|
*/
|
public static String getDate() {
|
return dateTimeNow(YYYY_MM_DD);
|
}
|
|
public static final String getTime() {
|
return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
|
}
|
|
public static final String dateTimeNow() {
|
return dateTimeNow(YYYYMMDDHHMMSS);
|
}
|
|
public static final String dateNow() {
|
return dateTimeNow(YYYYMMDD);
|
}
|
|
public static final String yearNow() {
|
return dateTimeNow(YYMMDD);
|
}
|
|
public static final String dateTimeNow(final String format) {
|
return parseDateToStr(format, new Date());
|
}
|
|
public static final String dateTime(final Date date) {
|
return parseDateToStr(YYYY_MM_DD, date);
|
}
|
|
public static final String dateTimeHh(final Date date) {
|
return parseDateToStr(YYYY_MM_DD_HH_MM_SS, date);
|
}
|
|
public static final String parseDateToStr(final String format, final Date date) {
|
return new SimpleDateFormat(format).format(date);
|
}
|
|
public static final Date dateTime(final String format, final String ts) {
|
try {
|
return new SimpleDateFormat(format).parse(ts);
|
} catch (ParseException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
/**
|
* 日期路径 即年/月/日 如2018/08/08
|
*/
|
public static final String datePath() {
|
Date now = new Date();
|
return DateFormatUtils.format(now, "yyyy/MM/dd");
|
}
|
|
/**
|
* 日期路径 即年/月/日 如20180808
|
*/
|
public static final String dateTime() {
|
Date now = new Date();
|
return DateFormatUtils.format(now, "yyyyMMdd");
|
}
|
|
/**
|
* 日期型字符串转化为日期 格式
|
*/
|
public static Date parseDate(Object str) {
|
if (str == null) {
|
return null;
|
}
|
try {
|
return parseDate(str.toString(), parsePatterns);
|
} catch (ParseException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 获取服务器启动时间
|
*/
|
public static Date getServerStartDate() {
|
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
|
return new Date(time);
|
}
|
|
/**
|
* 计算两个时间差
|
*/
|
public static String getDatePoor(Date endDate, Date nowDate) {
|
long nd = 1000 * 24 * 60 * 60;
|
long nh = 1000 * 60 * 60;
|
long nm = 1000 * 60;
|
// long ns = 1000;
|
// 获得两个时间的毫秒时间差异
|
long diff = endDate.getTime() - nowDate.getTime();
|
// 计算差多少天
|
long day = diff / nd;
|
// 计算差多少小时
|
long hour = diff % nd / nh;
|
// 计算差多少分钟
|
long min = diff % nd % nh / nm;
|
// 计算差多少秒//输出结果
|
// long sec = diff % nd % nh % nm / ns;
|
return day + "天" + hour + "小时" + min + "分钟";
|
}
|
|
/**
|
* 计算两个时间差天数
|
*/
|
public static long getDays(Date endDate, Date stratDate) {
|
long nd = 1000 * 24 * 60 * 60;
|
// long ns = 1000;
|
// 获得两个时间的毫秒时间差异
|
long diff = endDate.getTime() - stratDate.getTime();
|
// 计算差多少天
|
return diff / nd;
|
}
|
|
//时间类型日期转换格式
|
public static Date getDateFormatyyyyMMdd(String string) {
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
try {
|
Date date = dateFormat.parse(string);
|
return date;
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
|
}
|
|
public static Date getDateFormatyyyyMMdd01(String string) {
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
|
try {
|
Date date = dateFormat.parse(string);
|
return date;
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
|
}
|
|
public static String getFormatDatedd(Date date) {
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
|
try {
|
String limitdate = dateFormat.format(date);
|
|
return limitdate;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return "";
|
}
|
|
public static String getFormatMonth(Date date) {
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");
|
try {
|
String limitdate = dateFormat.format(date);
|
|
return limitdate;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return "";
|
}
|
|
|
public static String getDateStr(Date date) {
|
SimpleDateFormat dateFormat = new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS);
|
try {
|
String limitdate = dateFormat.format(date);
|
|
return limitdate;
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return "";
|
}
|
|
//获取前几天 或 后几天 时间
|
public static Date getBeforeOrAfterDate(Date date ,int num) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(date);
|
c.add(Calendar.DAY_OF_MONTH, num);
|
return c.getTime();
|
}
|
|
//获取前几月 或 后几月 时间
|
public static Date getBeforeOrAfterDateByMonth (Date date ,int num) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(date);
|
c.add(Calendar.MONTH, num);
|
return c.getTime();
|
}
|
|
/**
|
* 获取月份
|
* @param date
|
* @return
|
*/
|
public static Integer getMonth(Date date){
|
if(date == null) return null;
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
return cal.get(Calendar.MONTH)+1;
|
}
|
|
// 根据指定日期获取上一周日期
|
public static DateRange lastWeek(Date date) {
|
Calendar calendar1 = Calendar.getInstance();
|
Calendar calendar2 = Calendar.getInstance();
|
calendar1.setTime(date);
|
calendar2.setTime(date);
|
int dayOfWeek = calendar1.get(Calendar.DAY_OF_WEEK) - 1;
|
if(dayOfWeek <= 0){
|
dayOfWeek = 7;
|
}
|
int offset1 = 1 - dayOfWeek;
|
int offset2 = 7 - dayOfWeek;
|
calendar1.add(Calendar.DATE, offset1 - 7);
|
calendar2.add(Calendar.DATE, offset2 - 7);
|
// last Monday
|
String lastBeginDate = getFormatDatedd(calendar1.getTime());
|
System.out.println(calendar1.getTime());
|
// last Sunday
|
String lastEndDate = getFormatDatedd(calendar2.getTime());
|
// return lastBeginDate + "," + lastEndDate;
|
System.out.println(lastBeginDate+lastEndDate);
|
return new DateRange(lastBeginDate,lastEndDate);
|
}
|
|
// 根据指定日期获取当前周日期
|
public static DateRange nowWeek(Date date){
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
|
if (1 == dayWeek) {
|
cal.add(Calendar.DAY_OF_MONTH, -1);
|
}
|
cal.setFirstDayOfWeek(Calendar.MONDAY);
|
int day = cal.get(Calendar.DAY_OF_WEEK);
|
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
|
String imptimeBegin = dateTime(cal.getTime());
|
cal.add(Calendar.DATE, 6);
|
String imptimeEnd = dateTime(cal.getTime());
|
return new DateRange(imptimeBegin,imptimeEnd);
|
}
|
|
/**
|
* 获取date的月份的时间范围
|
* @param date
|
* @return
|
*/
|
public static DateRange getMonthRange(Date date) {
|
Calendar startCalendar = Calendar.getInstance();
|
startCalendar.setTime(date);
|
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
|
setMinTime(startCalendar);
|
|
Calendar endCalendar = Calendar.getInstance();
|
endCalendar.setTime(date);
|
endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
setMaxTime(endCalendar);
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
/**
|
* 获取当前季度的时间范围
|
* @return current quarter
|
*/
|
public static DateRange 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 DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
/**
|
* 获取昨天的时间范围
|
* @return
|
*/
|
public static DateRange 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 DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
/**
|
* 获取今天的时间范围
|
* @return
|
*/
|
public static DateRange getTodayRange() {
|
Calendar startCalendar = Calendar.getInstance();
|
startCalendar.add(Calendar.DAY_OF_MONTH, 0);
|
setMinTime(startCalendar);
|
|
Calendar endCalendar = Calendar.getInstance();
|
endCalendar.add(Calendar.DAY_OF_MONTH, 0);
|
setMaxTime(endCalendar);
|
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
|
|
/**
|
* 获取当前月份的时间范围
|
* @return
|
*/
|
public static DateRange 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 DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
|
/**
|
* 获取当前年的时间范围
|
* @return
|
*/
|
public static DateRange getThisYear() {
|
Calendar startCalendar = Calendar.getInstance();
|
startCalendar.set(startCalendar.get(Calendar.YEAR), 0, startCalendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
|
startCalendar.set(Calendar.DAY_OF_MONTH, startCalendar.getActualMinimum(Calendar.DAY_OF_MONTH));
|
setMinTime(startCalendar);
|
|
Calendar endCalendar = Calendar.getInstance();
|
endCalendar.set(endCalendar.get(Calendar.YEAR), 11, 31, 0, 0, 0);
|
setMaxTime(endCalendar);
|
|
return new DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
/**
|
* 获取上个月的时间范围
|
*/
|
public static DateRange 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 DateRange(startCalendar.getTime(), endCalendar.getTime());
|
}
|
|
/**
|
* 获取上个季度的时间范围
|
*/
|
public static DateRange 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 DateRange(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));
|
}
|
|
|
/**
|
* 通过时间秒毫秒数判断两个时间的间隔
|
* @param date1
|
* @param date2
|
* @return
|
*/
|
public static int differentDaysByMillisecond(Date date1, Date date2) {
|
int days = (int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24));
|
return days;
|
}
|
|
|
/**
|
* 增加 LocalDateTime ==> Date
|
*/
|
public static Date toDate(LocalDateTime temporalAccessor)
|
{
|
ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
|
return Date.from(zdt.toInstant());
|
}
|
|
/**
|
* 增加 LocalDate ==> Date
|
*/
|
public static Date toDate(LocalDate temporalAccessor)
|
{
|
LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
|
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
|
return Date.from(zdt.toInstant());
|
}
|
|
|
public static boolean dateCompare(Date beginDate, Date endDate) {
|
if(null == beginDate || null == endDate) return false;
|
// endDate > beginDate
|
if (endDate.getTime() > beginDate.getTime()) {
|
return true;
|
}
|
return false;
|
}
|
|
|
//获取第二天返钱时间
|
public static Date getNextMoneyDate()
|
{
|
Date date = dateTime(DateUtils.YYYY_MM_DD, getDate());
|
return DateUtils.getBeforeOrAfterDate(date, 1);
|
}
|
|
}
|