/**
* 时间工具类
*
*/
@Slf4j
public class TimeUtil {
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYMMDD = "yyMMdd";
public static final String YYYYMMDD = "yyyyMMdd";
public static final ZoneId DEFAULT_ZONE_ID = ZoneId.systemDefault();
}
1、获取时间
/**
* 获取当前日期
*
* @return
*/
public static Date getCurrentDate() {
return new Date();
}
/**
* 获取当前月份
*
* @return
*/
public static Integer getCurrentMonth() {
Calendar calendar = Calendar.getInstance();
int month = calendar.get(Calendar.MONTH) + 1;
return month;
}
/**
* 获取当前年份
*
* @return
*/
public static Integer getCurrentYear() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
return year;
}
/**
* 获取指定日期年
* @param date
* @return
*/
public static int getDateYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 获取指定日期月
* @param date
* @return
*/
public static int getDateMonth(Date date) {
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int currentMonthValue = localDate.getMonthValue();
return currentMonthValue;
}
/**
* 获取当前所属季度
* @return
*/
public static int getCurrentQuarter() {
int month = getCurrentMonth();
return month % 3 == 0 ? month / 3 : month / 3 + 1;
}
/**
* 获取指定月份所属季度
* @param month
* @return
*/
public static int getQuarter(int month) {
return month % 3 == 0 ? month / 3 : month / 3 + 1;
}
2、格式化日期
/**
* 当前时间格式化
*
* @param pattern 格式化规则
* @return
*/
public static String currentTimeFormat(String pattern) {
LocalDateTime nowDate = LocalDateTime.now();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
return dtf.format(nowDate);
}
/**
* 格式化日期
*
* @param time 当前时间
* @return
*/
public static String format(Date time) {
return format(time, YYYY_MM_DD_HH_MM_SS);
}
/**
* 格式化日期
*
* @param time 当前时间
* @param pattern 格式化规则
* @return
*/
public static String format(Date time, String pattern) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
ZoneId zoneId = ZoneId.systemDefault();
return dtf.format(time.toInstant().atZone(zoneId));
}
3、timestamp 转 字符串
/**
* timestamp 转 字符串
*
* @param timestamp
* @return
*/
public static String dateToStr(long timestamp) {
return dateToStr(timestamp, YYYY_MM_DD_HH_MM_SS);
}
/**
* timestamp 转 字符串(当地时区)
*
* @param timestamp 时间戳
* @param pattern 格式化规则
* @return
*/
public static String dateToStr(long timestamp, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
ZoneId zoneId = ZoneId.systemDefault();
String timeStr = formatter.format(new Date(timestamp).toInstant().atZone(zoneId));
return timeStr;
}
4、timestamp 转 date
/**
* 时间戳转Date
*
* @param timestamp 时间戳
* @return Date
*/
public static Date timestampToDate(long timestamp) {
return new Date(timestamp);
}
/**
* 时间戳转LocalDateTime
*
* @param timestamp 时间戳
* @return LocalDateTime
*/
public static LocalDateTime timestampToLocalDateTime(long timestamp) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), DEFAULT_ZONE_ID);
}
5、字符串 转 date
/**
* 字符串 转 date
*
* @param time
* @return
*/
public static Date strToDate(String time) {
return strToDate(time, YYYY_MM_DD_HH_MM_SS);
}
/**
*
*
* @param time 当前时间
* @param pattern 格式化规则
* @return
*/
public static Date strToDate(String time, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDateTime localDateTime = LocalDateTime.parse(time, formatter);
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* 字符串 转 date(注意,支持转换:yyyy-MM-dd格式)
*
* @param time 当前时间
* @param pattern 格式化规则
* @return
*/
public static Date sdfStrToDate(String time, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(time);
} catch (ParseException e) {
}
return null;
}
6、Date 转 LocalDateTime
/**
* Date 转 LocalDateTime
*
* @param currentDate 当前时间
* @return LocalDateTime
*/
public static LocalDateTime toLocalDateTime(Date currentDate) {
return LocalDateTime.ofInstant(currentDate.toInstant(), DEFAULT_ZONE_ID);
}
7、当前时间加多少秒后的时间戳
/**
* 当前时间加多少秒后的时间戳
*
* @param currentDate 当前时间
* @param seconds 加上的秒数
* @return 时间戳
*/
public static long currentDatePlusSeconds(Date currentDate, int seconds) {
Calendar newTime = Calendar.getInstance();
newTime.setTime(currentDate);
newTime.add(Calendar.SECOND, seconds);
return newTime.getTime().getTime();
}
8、一个日期是否在某个日期区间
/**
* 一个日期是否在某个日期区间
*
* @param now 日期
* @param startDate 开始日期
* @param EndDate 结束日期
* @return
*/
public static boolean dateRangeCompare(Date now, Date startDate, Date EndDate) {
int compare1 = Long.compare(now.getTime(), startDate.getTime());
int compare2 = Long.compare(now.getTime(), EndDate.getTime());
if (compare1 >= 0 && compare2 <= 0) {
return true;
}
return false;
}
9、2个日期比较
/**
* 2个日期比较
*
* @param oldLocalDateTime 旧日期
* @param newLocalDateTime 新日期
* @return <pre>
* -1:旧日期小于新日期; 0:2个日期相等; 1:旧日期大于新日期
* </pre>
*/
public static int localDateTimeToCompare(LocalDateTime oldLocalDateTime, LocalDateTime newLocalDateTime) {
return Long.compare(currentTimePlusSeconds(oldLocalDateTime, 0), currentTimePlusSeconds(newLocalDateTime, 0));
}
10、获取当天剩余的秒数
/**
* 获取当天剩余的秒数
*
* @param currentDate 当前时间
* @return
*/
public static Integer getRemainSecondsOneDay(Date currentDate) {
LocalDateTime midnight = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault()).plusDays(1).withHour(0).withMinute(0)
.withSecond(0).withNano(0);
LocalDateTime currentDateTime = LocalDateTime.ofInstant(currentDate.toInstant(),
ZoneId.systemDefault());
long seconds = ChronoUnit.SECONDS.between(currentDateTime, midnight);
return (int) seconds;
}
11、比较两个时间大小
/**
* 比较两个时间大小
* 如果a大于b返回true,否则返回false
*
* @param time1
* @param time2
* @return
* @throws ParseException
*/
public static boolean compare(String time1, String time2) {
try {
//如果想比较日期则写成"yyyy-MM-dd"就可以了
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//将字符串形式的时间转化为Date类型的时间
Date a = sdf.parse(time1);
Date b = sdf.parse(time2);
//Date类的一个方法,如果a早于b返回true,否则返回false
if (a.after(b)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 日期-天数得到一个新的日期
*
* @param str 日期
* @param day 天数
* @param pattern 格式
* @return
*/
public static String subtractDay(String pattern, String str, int day) {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
//str转date
Date date = simpleDateFormat.parse(str);
Calendar cld = Calendar.getInstance();
cld.setTime(date);
cld.set(Calendar.DATE, cld.get(Calendar.DATE) - day);
return simpleDateFormat.format(cld.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
12、当前时间+(-)月份
/**
* 当前时间之前(-n)个月 / 之后(n)个月
* @param mon
* @return
*/
public static String getMon(int mon) {
Calendar calendar2 = Calendar.getInstance();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
calendar2.add(Calendar.MONTH, mon);
String date = sdf2.format(calendar2.getTime());
return date;
}
13、获取第一天/最后一天
/**
* 获取上个月的第一天
* @return
*/
public static String getBeforeFirstMonth() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 将小时至00
calendar.set(Calendar.HOUR_OF_DAY, 00);
// 将分钟至00
calendar.set(Calendar.MINUTE, 00);
// 将秒至00
calendar.set(Calendar.SECOND, 00);
String format1 = format.format(calendar.getTime());
return format1;
}
/**
* 获取上个月的最后一天的时间
*/
public static String getBeforeLastMonth() {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar calendar = Calendar.getInstance();
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
// 将小时至23
calendar.set(Calendar.HOUR_OF_DAY, 23);
// 将分钟至59
calendar.set(Calendar.MINUTE, 59);
// 将秒至59
calendar.set(Calendar.SECOND, 59);
String format = sf.format(calendar.getTime());
return format;
}
/**
* 获取指定日期的月份第一天
* @param date
* @return
*/
public static Date getDateMonthBeginDate(Date date) {
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate firstDayOfMonth = localDate.withDayOfMonth(1);
Date firstDateOfMonth = Date
.from(firstDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
return firstDateOfMonth;
}
/**
* 获取指定日期的最后一天
* @param date
* @return
*/
public static Date getDateMonthEndDate(Date date) {
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate lastDayOfMonth = localDate.withDayOfMonth(localDate.lengthOfMonth());
Date lastDateOfMonth = Date
.from(lastDayOfMonth.atStartOfDay(ZoneId.systemDefault()).toInstant());
return lastDateOfMonth;
}