common-module/utils/DateUtils.java
cuijiawang ea58e018b4 init
2025-05-27 17:58:49 +08:00

301 lines
8.3 KiB
Java
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.sgcc.utils;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils;
/**
* 时间日期工具类
*
* @author zhaoyuanyuan
* @version 1.0.0
* @date 2024/07/23 14:24
*/
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
public static final String YYYY = "yyyy";
public static final String YYYY_MM = "yyyy-MM";
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private static final 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 {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:25
*/
public static Date getNowDate() {
return new Date();
}
/**
* 获取当前Date型日期 YYYY_MM_DD
*
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:25
*/
public static String getDate() {
return dateTimeNow(YYYY_MM_DD);
}
/**
* 获取当前Date型日期 YYYY_MM_DD_HH_MM_SS
*
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:25
*/
public static final String getTime() {
return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
}
/**
* 获取当前Date型日期 YYYYMMDDHHMMSS
*
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:25
*/
public static final String dateTimeNow() {
return dateTimeNow(YYYYMMDDHHMMSS);
}
/**
* 获取当前Date型日期 format
*
* @param format 格式化类型
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:25
*/
public static final String dateTimeNow(final String format) {
return parseDateToStr(format, new Date());
}
/**
* 获取Date型日期 YYYY_MM_DD
*
* @param date
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:26
*/
public static final String dateTime(final Date date) {
return parseDateToStr(YYYY_MM_DD, date);
}
/**
* 将Date型日期转换为format型字符串
*
* @param format 格式化类型
* @param date 日期
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:26
*/
public static final String parseDateToStr(final String format, final Date date) {
return new SimpleDateFormat(format).format(date);
}
/**
* 获取Date型日期 format
*
* @param format 格式化类型
* @param ts 日期字符串
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:27
*/
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);
}
}
/**
* 日期路径 即年/月/日 如2024/08/08
*
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:27
*/
public static final String datePath() {
Date now = new Date();
return DateFormatUtils.format(now, "yyyy/MM/dd");
}
/**
* 日期路径 即年/月/日 如20240808
*
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:27
*/
public static final String dateTime() {
Date now = new Date();
return DateFormatUtils.format(now, "yyyyMMdd");
}
/**
* 日期型字符串转化为日期格式
*
* @param str
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:28
*/
public static Date parseDate(Object str) {
if (str == null) {
return null;
}
try {
return parseDate(str.toString(), parsePatterns);
} catch (ParseException e) {
return null;
}
}
/**
* 获取服务器启动时间
*
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:28
*/
public static Date getServerStartDate() {
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
return new Date(time);
}
/**
* 计算相差天数
*
* @param date1 开始日期
* @param date2 结束日期
* @return int
* @author zhaoyuanyuan
* @date 2024/07/23 14:28
*/
public static int differentDaysByMillisecond(Date date1, Date date2) {
return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24)));
}
/**
* 计算两个时间差
*
* @param startDate 开始日期
* @param endDate 结束日期
* @return {@code String }
* @author zhaoyuanyuan
* @date 2024/07/23 14:30
*/
public static String getDatePoor(Date startDate, Date endDate) {
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = startDate.getTime() - endDate.getTime();
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
//输出结果
return day + "" + hour + "小时" + min + "分钟";
}
/**
* 将 LocalDateTime 对象转换为 Date 对象
*
* @param temporalAccessor LocalDateTime 实例
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:30
*/
public static Date toDate(LocalDateTime temporalAccessor) {
// 将 LocalDateTime 转换为系统默认时区的 ZonedDateTime
ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault());
// 使用 ZonedDateTime 的瞬时时间创建 Date 对象
return Date.from(zdt.toInstant());
}
/**
* 将 LocalDate 对象转换为 Date 对象
*
* @param temporalAccessor LocalDate 实例
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/23 14:30
*/
public static Date toDate(LocalDate temporalAccessor) {
// 将 LocalDate 转换为 LocalDateTime时间为 00:00:00
LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0));
// 将 LocalDateTime 转换为系统默认时区的 ZonedDateTime
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
// 使用 ZonedDateTime 的瞬时时间创建 Date 对象
return Date.from(zdt.toInstant());
}
/**
* 判断传入日期是否在系统当前日期之后
*
* @param date 日期
* @return boolean
* @author zhaoyuanyuan
* @date 2024/07/23 14:34
*/
public static boolean isGreaterThanNow(Date date) {
Date nowDate = new Date();
int compareResult = date.compareTo(nowDate);
if (compareResult > 0) {
return true;
} else {
return false;
}
}
/**
* 获取指定日期特定分钟数后的日期
*
* @param date 指定日期
* @param minutes 分钟数
* @return {@code Date }
* @author zhaoyuanyuan
* @date 2024/07/31 16:50
*/
public static Date getMinutesAfterDate(Date date, Integer minutes) {
Instant instant = date.toInstant();
//转换为LocalDateTime
LocalDateTime specifiedDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
//在指定日期基础上,增加指定分钟数
LocalDateTime newDateTime = specifiedDateTime.plus(Duration.ofMinutes(minutes));
return toDate(newDateTime);
}
}