You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1128 lines
33 KiB

package com.lx.common.util;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* 日期处理工具类
*
* @version 1.0
*/
public class DateTimeUtils extends DateUtils {
public static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String FULL_DATE_FORMAT_CN = "yyyy年MM月dd日 HH时mm分ss秒";
public static final String PART_DATE_FORMAT = "yyyy-MM-dd";
public static final String PART_DATE_FORMAT_TWO = "yyyy/MM/dd";
public static final String PART_DATE_FORMAT_CN = "yyyy年MM月dd日";
public static final String PARTDATEFORMAT = "yyyyMMdd";
public static final String YEAR_DATE_FORMAT = "yyyy";
public static final String MONTH_DATE_FORMAT = "MM";
public static final String DAY_DATE_FORMAT = "dd";
public static final String WEEK_DATE_FORMAT = "week";
/**
* 星座
*/
private final static int[] dayArr = new int[]{20, 19, 21, 20, 21, 22, 23,
23, 23, 24, 23, 22};
private final static String[] constellationArr = new String[]{"摩羯座",
"水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座",
"天蝎座", "射手座", "摩羯座"};
/**
* 将日期类型转换为字符串
*
* @param date 日期
* @param xFormat 格式
* @return
*/
public static String getFormatDate(Date date, String xFormat) {
date = date == null ? new Date() : date;
xFormat = StringUtils.isNotEmpty(xFormat) == true ? xFormat : FULL_DATE_FORMAT;
SimpleDateFormat sdf = new SimpleDateFormat(xFormat);
return sdf.format(date);
}
/**
* 比较日期大小
*
* @param dateX
* @param dateY
* @return x < y return [-1];
* x = y return [0] ;
* x > y return [1] ;
*/
public static int compareDate(Date dateX, Date dateY) {
return dateX.compareTo(dateY);
}
/**
* 将日期字符串转换为日期格式类型
*
* @param xDate
* @param xFormat 为NULL则转换如:2012-06-25
* @return
*/
public static Date parseString2Date(String xDate, String xFormat) {
while (!isNotDate(xDate, xFormat)) {
xFormat = StringUtils.isEmpty(xFormat) == true ? PART_DATE_FORMAT : xFormat;
SimpleDateFormat sdf = new SimpleDateFormat(xFormat);
Date date = null;
try {
date = sdf.parse(xDate);
} catch (ParseException e) {
e.printStackTrace();
return null;
}
return date;
}
return null;
}
/**
* 判断需要转换类型的日期字符串是否符合格式要求
*
* @param xDate
* @return
*/
public static boolean isNotDate(String xDate, String format) {
SimpleDateFormat sdf;
try {
if (StringUtils.isEmpty(format)) {
sdf = new SimpleDateFormat(PART_DATE_FORMAT);
} else {
sdf = new SimpleDateFormat(format);
}
if (StringUtils.isEmpty(xDate)) {
return true;
}
sdf.parse(xDate);
return false;
} catch (ParseException e) {
e.printStackTrace();
return true;
}
}
public static boolean isDate(String xDate) {
return !isDate(xDate);
}
/**
* 获取俩个日期之间相差多少天
*
* @param dateX
* @param dateY
* @return
*/
public static int getDiffDays(Date dateX, Date dateY) {
if ((dateX == null) || (dateY == null)) {
return 0;
}
long dayX = dateX.getTime();
long dayY = dateY.getTime();
return dayX > dayY ? (int) ((dayX - dayY) / (60 * 60 * 1000 * 24)) : (int) ((dayY - dayX) / (60 * 60 * 1000 * 24));
}
/**
* 获取俩个日期之间相差多少小时
*
* @param dateX
* @param dateY
* @return
*/
public static int getDiffHours(Date dateX, Date dateY) {
if ((dateX == null) || (dateY == null)) {
return 0;
}
long dayX = dateX.getTime();
long dayY = dateY.getTime();
return dayX > dayY ? (int) ((dayX - dayY) / (60 * 60 * 1000)) : (int) ((dayY - dayX) / (60 * 60 * 1000));
}
/**
* 获取俩个日期之间相差多少小时
*
* @param dateX
* @param dateY
* @return
*/
public static int getDiffMinute(Date dateX, Date dateY) {
if ((dateX == null) || (dateY == null)) {
return 0;
}
long dayX = dateX.getTime();
long dayY = dateY.getTime();
return dayX > dayY ? (int) ((dayX - dayY) / (60 * 1000)) : (int) ((dayY - dayX) / (60 * 1000));
}
/**
* 获取传值日期之后几天的日期并转换为字符串类型
*
* @param date 需要转换的日期 date 可以为NULL 此条件下则获取当前日期
* @param after 天数
* @param xFormat 转换字符串类型 (可以为NULL)
* @return
*/
public static String getAfterCountDate(Date date, int after, String xFormat) {
date = date == null ? new Date() : date;
xFormat = StringUtils.isNotEmpty(xFormat) ? xFormat : PART_DATE_FORMAT;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, after);
return getFormatDate(calendar.getTime(), xFormat);
}
/**
* 获取传值日期之前几天的日期并转换为字符串类型
*
* @param date 需要转换的日期 date 可以为NULL 此条件下则获取当前日期
* @param xFormat 转换字符串类型 (可以为NULL)
* @return
*/
public static String getBeforeCountDate(Date date, int before, String xFormat) {
date = date == null ? new Date() : date;
xFormat = StringUtils.isNotEmpty(xFormat) == true ? xFormat : PART_DATE_FORMAT;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -before);
return getFormatDate(calendar.getTime(), xFormat);
}
/**
* 获取日期的参数 如:年 , 月 , 日 , 星期几
*
* @param xDate 日期 可以为日期格式,可以是字符串格式; 为NULL或者其他格式时都判定为当前日期
* @param xFormat 年 yyyy 月 MM 日 dd 星期 week ;其他条件下都返回0
*/
public static int getDateTimeParam(Object xDate, String xFormat) {
xDate = xDate == null ? new Date() : xDate;
Date date = null;
if (xDate instanceof String) {
date = parseString2Date(xDate.toString(), null);
} else if (xDate instanceof Date) {
date = (Date) xDate;
} else {
date = new Date();
}
date = date == null ? new Date() : date;
if (StringUtils.isNotEmpty(xFormat)
&& (xFormat.equals(YEAR_DATE_FORMAT)
|| xFormat.equals(MONTH_DATE_FORMAT)
|| xFormat.equals(DAY_DATE_FORMAT))) {
return Integer.parseInt(getFormatDate(date, xFormat));
} else if (StringUtils.isNotEmpty(xFormat)
&& (WEEK_DATE_FORMAT.equals(xFormat))) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int week = cal.get(Calendar.DAY_OF_WEEK) - 1 == 0 ?
7 : cal.get(Calendar.DAY_OF_WEEK) - 1;
return week;
} else {
return 0;
}
}
/**
* 日期格式转换为时间戳
*
* @param time
* @param format
* @return
*/
public static Long getLongTime(String time, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = null;
try {
date = sdf.parse(time);
return (date.getTime() / 1000);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取星期字符串
*
* @param xDate
* @return
*/
public static String getWeekString(Object xDate) {
int week = getDateTimeParam(xDate, WEEK_DATE_FORMAT);
switch (week) {
case 1:
return "星期一";
case 2:
return "星期二";
case 3:
return "星期三";
case 4:
return "星期四";
case 5:
return "星期五";
case 6:
return "星期六";
case 7:
return "星期日";
default:
return "";
}
}
/**
* 获得十位时间
*/
public static Long getTenBitTimestamp() {
return System.currentTimeMillis() / 1000;
}
/**
* 获得某天的结束时间
*/
public static Date getDateEnd(Date date) {
return new Date(date.getTime() + (86400 - 1) * 1000);
}
/**
* 日期格式转换为毫秒
*
* @param time
* @param format
* @return
*/
public static Long getLongDateTime(String time, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = null;
try {
date = sdf.parse(time);
return date.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取某天开始时间戳_10位
*/
public static Long getStartTimestamp(Date date) {
Calendar calendar = Calendar.getInstance();
date = date == null ? new Date() : date;
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime().getTime() / 1000;
}
/**
* 获取某天结束时间戳_10位
*/
public static Long getEndTimestamp(Date date) {
Calendar calendar = Calendar.getInstance();
date = date == null ? new Date() : date;
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime().getTime() / 1000;
}
/**
* 获取昨天日期
*
* @param date
* @return
*/
public static Date getYesterday(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
date = calendar.getTime();
return date;
}
/**
* 获取明天时间(参数时间+1天)
*
* @param date
* @return
*/
public static Date getTomorrowday(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DAY_OF_YEAR, +1);
return c.getTime();
}
/* 10位int型的时间戳转换为String(yyyy-MM-dd HH:mm:ss)
*
* @param time
* @return
*/
public static String timestampToString(Integer time, String format) {
// int转long时,先进行转型再进行计算,否则会是计算结束后在转型
long temp = (long) time * 1000;
Timestamp ts = new Timestamp(temp);
String tsStr = "";
DateFormat dateFormat = new SimpleDateFormat(format);
try {
// 方法一
tsStr = dateFormat.format(ts);
} catch (Exception e) {
e.printStackTrace();
}
return tsStr;
}
/**
* 获取某天开始时间
*/
public static Date getStartTime(Date date) {
Calendar calendar = Calendar.getInstance();
date = date == null ? new Date() : date;
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取某天结束时间
*/
public static Date getEndTime(Date date) {
Calendar calendar = Calendar.getInstance();
date = date == null ? new Date() : date;
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* Date类型转换为10位时间戳
*
* @param time
* @return
*/
public static Integer DateToTimestamp(Date time) {
Timestamp ts = new Timestamp(time.getTime());
return (int) ((ts.getTime()) / 1000);
}
/**
* 获取当前时间之前或之后几分钟
*
* @param minute
* @return
*/
public static String getMinuteToString(int minute, Date time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.add(Calendar.MINUTE, minute);
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(calendar.getTime());
}
/**
* 获取当前时间之前或之后几分钟
*
* @param minute
* @return
*/
public static Date getMinuteToTime(int minute, Date time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
calendar.add(Calendar.MINUTE, minute);
return calendar.getTime();
}
/**
* @return java.lang.String
* @Author 陈树森
* @Description 将数据库里的timestamp转为指定日期数据格式字符串
* @Date 16:11 2018/11/26 0026
* @Param [timestamp, format]
**/
public static String timestampToString(Timestamp timestamp, String format) {
return new SimpleDateFormat(format).format(timestamp);
}
/**
* @return java.lang.String
* @Author 陈树森
* @Description 将数据库里的timestamp转为默认格式
* @Date 16:12 2018/11/26 0026
* @Param [timestamp]
**/
public static String timestampDefaultFormat(Timestamp timestamp) {
if (timestamp == null) {
return null;
}
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp);
}
/**
* @return
* @Author 陈树森
* @Description date默认格式yyyy-MM-dd HH:mm:ss
* @Date 11:48 2018/12/26 0026
* @Param [date]
**/
public static String dateDefaultFormat(Date date) {
if (date == null) {
return null;
}
return getFormatDate(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* @return date
* @Description 获取当前时间N天后的时间
* @Date 2019/01/09 13:58:00
* @Param [day]
*/
public static Date getTimeByDay(int day) {
return getTimeByDay(new Date(), day);
}
/**
* 获取指定时间N天后的时间
*
* @param d1
* @param day
* @return
*/
public static Date getTimeByDay(Date d1, int day) {
long temp1 = d1.getTime();
temp1 = temp1 + day * 0x5265c00L;
return (new Date(temp1));
}
/**
* 两个日期相差的分钟数
*
* @param date1
* @param date2
* @return
*/
public static long getMinuteSpace(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(date1);
calendar2.setTime(date2);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffDays = diff / (60 * 1000);
return Math.abs(diffDays);
}
/**
* 获取当前时间的小时
*
* @param date
* @return
*/
public static Integer getHourOfDate(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.HOUR_OF_DAY);
}
/**
* 获取指定时间,在每月的几号
*
* @param date
* @return
*/
public static Integer getDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 两个日期相差的天数
*
* @param date1
* @param date2
* @return
*/
public static long getDateSpace(Date date1, Date date2) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(date1);
calendar2.setTime(date2);
long milliseconds1 = calendar1.getTimeInMillis();
long milliseconds2 = calendar2.getTimeInMillis();
long diff = milliseconds2 - milliseconds1;
long diffDays = diff / (24 * 60 * 60 * 1000);
return Math.abs(diffDays);
}
/**
* 获取今天还剩下多少秒
*
* @return
*/
public static int getMiao(int num) {
Calendar curDate = Calendar.getInstance();
//获取当前时间的第二天早上num点
Calendar tommorowDate = new GregorianCalendar(curDate.get(Calendar.YEAR), curDate.get(Calendar.MONTH), curDate.get(Calendar.DATE) + 1, num, 0, 0);
return (int) (tommorowDate.getTimeInMillis() - curDate.getTimeInMillis()) / 1000;
}
/**
* 时间相差多少秒
*/
public static long secondsDifferen(Date d1, Date d2) {
long temp1 = d1.getTime();
long temp2 = d2.getTime();
return (long) ((temp2 - temp1) / 1000);
}
/**
* 多少月后的时间
*/
public static Date getTimeByMonth(int month) {
return getTimeByMonth(new Date(), month);
}
public static Date getTimeByMonth(Date m1, int month) {
Calendar c = Calendar.getInstance();
c.setTime(m1);
c.add(Calendar.MONTH, month);
Date m = c.getTime();
return m;
}
/**
* 天数转换为秒数
*/
public static int dayConvertSecond(int day) {
//一天的秒数
int secondOfDay = 60 * 60 * 24;
//计算N天的秒数
return day * secondOfDay;
}
/**
* 检查年月日是否合法
*
* @param ymd
* @return
*/
public static boolean checkYearMonthDay(String ymd) {
if (ymd == null || ymd.length() == 0) {
return false;
}
String s = ymd.replaceAll("[/\\- ]", "/");
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
try {
Date date = format.parse(s);
return true;
} catch (ParseException e) {
return false;
}
}
/**
* Java通过生日计算星座 生日格式必须为 yyyy-MM-dd
*
* @param birthday
* @return
*/
public static String getConstellation(String birthday) {
int month = 0;
int day = 0;
Date birthdayDateTime = DateTimeUtils.parseString2Date(birthday, "yyyy-MM-dd");
if (null != birthdayDateTime) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(birthdayDateTime);
month = calendar.get(Calendar.MONTH) + 1;
day = calendar.get(Calendar.DAY_OF_MONTH);
}
return day < dayArr[month - 1] ? constellationArr[month - 1]
: constellationArr[month];
}
/**
* 通过生日计算属相
*
* @param year
* @return
*/
public static String getYear(int year) {
if (year < 1900) {
return "未知";
}
int start = 1900;
String[] years = new String[]{"鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊",
"猴", "鸡", "狗", "猪"};
return years[(year - start) % years.length];
}
/**
* 时分秒判断大小
*
* @param s1 时间比较
* @param s2
* @return boolean true 大于 false 小于
*/
public static boolean compareVehicle(String s1, String s2) {
boolean flag = true;
SimpleDateFormat sf = new SimpleDateFormat("HH:mm");
try {
Date date1 = sf.parse(s1);
Date date2 = sf.parse(s2);
if (date1.getTime() > date2.getTime()) {
flag = true;
} else {
flag = false;
}
} catch (ParseException e) {
e.printStackTrace();
}
return flag;
}
/**
* 获得某天最大时间 2018-03-20 23:59:59
*
* @param date
* @return
*/
public static String getEndOfDay(Date date) {
Calendar calendarEnd = Calendar.getInstance();
calendarEnd.setTime(date);
calendarEnd.set(Calendar.HOUR_OF_DAY, 23);
calendarEnd.set(Calendar.MINUTE, 59);
calendarEnd.set(Calendar.SECOND, 59);
//防止mysql自动加一秒,毫秒设为0
calendarEnd.set(Calendar.MILLISECOND, 0);
return dateDefaultFormat(calendarEnd.getTime());
}
/**
* 获得某天最小时间 2018-03-20 00:00:00
*
* @param date
* @return
*/
public static String getFirstOfDay(Date date) {
Calendar calendarStart = Calendar.getInstance();
calendarStart.setTime(date);
calendarStart.set(Calendar.HOUR_OF_DAY, 0);
calendarStart.set(Calendar.MINUTE, 0);
calendarStart.set(Calendar.SECOND, 0);
calendarStart.set(Calendar.MILLISECOND, 0);
return dateDefaultFormat(calendarStart.getTime());
}
/**
* 两个时间相差距离多少天多少小时多少分多少秒
*
* @param str1 时间参数 1 格式:1990-01-01 12:00:00
* @param str2 时间参数 2 格式:2009-01-01 12:00:00
* @return long[] 返回值为:{天, 时, 分, 秒}
*/
public static long[] getDistanceTimes(Date str1, Date str2) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date one = str1;
Date two = str2;
long day = 0;
long hour = 0;
long min = 0;
long sec = 0;
long time1 = one.getTime();
long time2 = two.getTime();
long diff;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
day = diff / (24 * 60 * 60 * 1000);
hour = (diff / (60 * 60 * 1000) - day * 24);
min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
long[] times = {day, hour, min, sec};
return times;
}
/**
* 获取多少秒之后的日期
*
* @param date
* @param second
* @return
*/
public static Date getLastDateBySecond(Date date, Integer second) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制
//SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制
if (date == null) {
return null;
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.SECOND, second);//24小时制
date = cal.getTime();
cal = null;
return date;
}
/**
* 根据年龄获取年份
*
* @param age
* @return
*/
public static String getCalculateAge(int age) {
String toDay = DateTimeUtils.getFormatDate(new Date(), DateTimeUtils.YEAR_DATE_FORMAT);
if (age > Integer.valueOf(toDay)) {
return null;
}
Integer year = Integer.valueOf(toDay) - age;
return year.toString();
}
/**
* 获取N天前的字符串格式日期
*
* @param format 如:yyyy-MM-dd
* @param nDay
* @return
*/
public static String getNDayAgoByDay(String format, Integer nDay) {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(format);
calendar.add(Calendar.DATE, nDay);
String ndaysAgo = sdf.format(calendar.getTime());
return ndaysAgo;
}
/**
* 获取时间差,不考虑时分秒
*
* @param dateBefore
* @param dateAfter
* @return int 1、昨天 2、近7天 3、近15天 4、近30天
*/
public static Integer getTimeScope(Date dateBefore, Date dateAfter) {
int daysDifferent = compareDays(dateBefore, dateAfter);//1、昨天 2、近7天 3、近15天 4、近30天
if (daysDifferent == 1) {
return 1;
} else if (daysDifferent >= 2 && daysDifferent <= 7) {
return 2;
} else if (daysDifferent >= 8 && daysDifferent <= 15) {
return 3;
}
return 4;
}
public static int compareDays(Date datebefore, Date dateAfter) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(datebefore);
calendar2.setTime(dateAfter);
int day1 = calendar1.get(Calendar.DAY_OF_YEAR);
int day2 = calendar2.get(Calendar.DAY_OF_YEAR);
int year1 = calendar1.get(Calendar.YEAR);
int year2 = calendar2.get(Calendar.YEAR);
if (year1 > year2) {
int tempyear = year1;
int tempday = day1;
day1 = day2;
day2 = tempday;
year1 = year2;
year2 = tempyear;
}
if (year1 == year2) {
return day2 - day1;
} else {
int DayCount = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
DayCount += 366;
} else {
DayCount += 365;
}
}
return DayCount + (day2 - day1);
}
}
public static Date asDate(LocalDateTime localDateTime) {
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 小于10 追加0
*
* @param obj
* @return
*/
public static String appendZero(Integer obj) {
if (obj < 10) {
return '0' + String.valueOf(obj);
} else {
return String.valueOf(obj);
}
}
/*
* 功能描述: <br>
* 获取时间与当前时间相差分钟数
* @param: time
* @Return: int
* @Author: 97342
* @Date: 2020/8/22 12:40
*/
public static int getMinuteByNow(Date time) throws Exception {
Date date = new Date();
long millsecond = date.getTime() - time.getTime();
if (millsecond < 0) {
throw new Exception("时间超前异常");
}
int minute = (int) millsecond / 60000;
return minute;
}
/*
* 功能描述: <br>
* 时间戳转LocalDateTime
* @param: time
* @Return: java.time.LocalDateTime
* @Author: 97342
* @Date: 2020/8/27 16:17
*/
public static LocalDateTime longToLocalDateTime(Long time) {
LocalDateTime localDateTime = new Date(time).toInstant().atOffset(ZoneOffset.of("+08:00")).toLocalDateTime();
return localDateTime;
}
/**
* 获取 一天的开始时间
*
* @param localDateTime
* @return java.time.LocalDateTime
* @author BNMZY
*/
public static LocalDateTime getTimeBegin(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
DateTime dateTime = DateUtil.beginOfDay(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取 一天结束的时间
*
* @param localDateTime
* @return java.time.LocalDateTime
* @author BNMZY
*/
public static LocalDateTime getTimeEnd(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
DateTime dateTime = DateUtil.endOfDay(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 指定日期所在月的第一天
*
* @param localDateTime
* @return
*/
public static LocalDateTime getMonthStart(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
DateTime dateTime = DateUtil.beginOfMonth(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 功能描述: <br>
* LocalDateTime 转String 格式 yyyy-MM-dd HH:mm:ss
*
* @param: time
* @Return: java.lang.String
* @Author: 97342
* @Date: 2020/9/21 15:11
*/
public static String LocalDateTimeToString(LocalDateTime time) {
String format = time.format(DateTimeFormatter.ofPattern(FULL_DATE_FORMAT));
return format;
}
/**
* 获取上周一的日期
*
* @param localDateTime
* @return
*/
public static LocalDateTime getLastWeekMonday(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_WEEK, -7);
date = cal.getTime();
DateTime dateTime = DateUtil.beginOfWeek(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取本周一的日期
*
* @param localDateTime
* @return
*/
public static LocalDateTime getThisWeekMonday(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
DateTime dateTime = DateUtil.beginOfWeek(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取上周最后一天的日期
*
* @param localDateTime
* @return
*/
public static LocalDateTime getLastWeekSunday(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DAY_OF_WEEK, -7);
date = cal.getTime();
DateTime dateTime = DateUtil.endOfWeek(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取本月第一天的日期
*
* @return
*/
public static LocalDateTime getFirstDayOfMonth(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
DateTime dateTime = DateUtil.beginOfMonth(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取上月第一天的日期
*
* @return
*/
public static LocalDateTime getFirstDayLastMonth(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1);
date = cal.getTime();
DateTime dateTime = DateUtil.beginOfMonth(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
* 获取上月最后一天的日期
*
* @return
*/
public static LocalDateTime getLastDayLastMonth(LocalDateTime localDateTime) {
String format = DateUtil.formatLocalDateTime(localDateTime);
Date date = DateUtil.parse(format);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1);
date = cal.getTime();
DateTime dateTime = DateUtil.endOfMonth(date);
return DateUtil.toLocalDateTime(dateTime);
}
/**
*
* @param startDay 开始日期
* @param endDay 结束日期
* @return 返回包含开始结束日期的集合
*/
public static List<LocalDate> getDays(LocalDate startDay, LocalDate endDay){
List<LocalDate> days = new ArrayList<>();
LocalDate start= ObjectUtil.clone(startDay);
LocalDate end= ObjectUtil.clone(endDay);
days.add(start);
while (start.isBefore(end)){
start=start.plusDays(1L);
days.add(start);
}
Collections.reverse(days);
return days;
}
}