|
|
@@ -0,0 +1,321 @@
|
|
|
+package org.jeecg.modules.utils;
|
|
|
+
|
|
|
+
|
|
|
+import java.time.*;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.time.temporal.ChronoUnit;
|
|
|
+import java.time.temporal.TemporalAdjusters;
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author Scott
|
|
|
+ * @apiNote 常用的日期时间转换工具类
|
|
|
+ * @Time 2022年10月8日15:30:17
|
|
|
+ */
|
|
|
+public class DateTimeUtil {
|
|
|
+
|
|
|
+ public static final String FULL_STYLE = "yyyy-MM-dd HH:mm:ss";
|
|
|
+ public static final String LOCAL_DATE = "yyyy-MM-dd";
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ long l = DateTimeUtil.subDay(new Date(), DateTimeUtil.addDay(new Date(), -2L));
|
|
|
+ System.out.println(l);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date addSecond(Date sourceDateTime, Long addSecond) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = sourceDateTime.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime1 = localDateTime.plusSeconds(addSecond);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(localDateTime1.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给指定日期添加天数
|
|
|
+ * @param sourceDateTime
|
|
|
+ * @param addDay -数时,为减去天数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date addDay(Date sourceDateTime, Long addDay) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = sourceDateTime.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime1 = localDateTime.plusDays(addDay);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(localDateTime1.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给指定日期添加分钟
|
|
|
+ * @param sourceDateTime
|
|
|
+ * @param addMinute -分钟,为减去分钟数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date addMinute(Date sourceDateTime, Long addMinute) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = sourceDateTime.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime1 = localDateTime.plusMinutes(addMinute);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(localDateTime1.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 日期比较
|
|
|
+ * @param d1 日期1
|
|
|
+ * @param d2 日期2
|
|
|
+ * @return 返回1=日期 1 大于 日期 2; 返回0= 日期1= 日期2,; 返回-1 日期1 小于日期2
|
|
|
+ */
|
|
|
+ public static int diffDateTime(Date d1, Date d2) {
|
|
|
+ if (d1.getTime() > d2.getTime()) {
|
|
|
+ return 1;
|
|
|
+ } else if (d1.getTime() == d2.getTime()) {
|
|
|
+ return 0;
|
|
|
+ } else if (d1.getTime() < d2.getTime()) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 日期比较 当diffDate 日期比开始时间还小,返回-1
|
|
|
+ * 日期比结束时间打,返回1
|
|
|
+ * 在区间范围内,返回0
|
|
|
+ * @param startTime 开始日期
|
|
|
+ * @param endTime 结束日期
|
|
|
+ * @param diffDate 比较日期
|
|
|
+ * @return 返回1=日期 1 大于 日期 2; 返回0= 日期1= 日期2,; 返回-1 日期1 小于日期2
|
|
|
+ */
|
|
|
+ public static int diffDateTime(Date startTime, Date endTime, Date diffDate) {
|
|
|
+ if (startTime.getTime() <= diffDate.getTime() && endTime.getTime() >= diffDate.getTime()) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if (startTime.getTime() > diffDate.getTime()) {
|
|
|
+ return -1;
|
|
|
+ } else if (endTime.getTime() < diffDate.getTime()) {
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ return 2;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断日期是否在 范围内
|
|
|
+ * @param d1 比较日期
|
|
|
+ * @param d2 参照日期
|
|
|
+ * @param dayRange 天数范围
|
|
|
+ * @return 当d2减去d1的相差天数 在 dayRange范围内,返回true,否则返回false
|
|
|
+ */
|
|
|
+ public static boolean checkRangeDay(Date d1, Date d2, Long dayRange) {
|
|
|
+ LocalDateTime d1DateTime = getLocalDateTime(d1);
|
|
|
+ LocalDateTime d2DateTime = getLocalDateTime(d2);
|
|
|
+ long until = d1DateTime.until(d2DateTime, ChronoUnit.DAYS); //得到两个日期差
|
|
|
+ if (until <= dayRange) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断日期是否在 范围内
|
|
|
+ * @param d1 比较日期
|
|
|
+ * @param d2 参照日期
|
|
|
+ * @param second 秒
|
|
|
+ * @return 当d2减去d1的相差天数 在 dayRange范围内,返回true,否则返回false
|
|
|
+ */
|
|
|
+ public static boolean checkRangeSecond(Date d1, Date d2, Long second) {
|
|
|
+ LocalDateTime d1DateTime = getLocalDateTime(d1);
|
|
|
+ LocalDateTime d2DateTime = getLocalDateTime(d2);
|
|
|
+ long until = d1DateTime.until(d2DateTime, ChronoUnit.SECONDS); //得到两个秒差
|
|
|
+ if (until <= second) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static LocalDateTime getLocalDateTime(Date d1) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = d1.toInstant();
|
|
|
+ LocalDateTime d1DateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ return d1DateTime;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的 00:00:00秒
|
|
|
+ * @param d1
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getStartTime(Date d1) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = d1.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime temp = localDateTime.withHour(0).withMinute(0).withSecond(0);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(temp.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的 00:00:00秒
|
|
|
+ * @param d1
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime getStartLocalDateTime(Date d1) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = d1.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime temp = localDateTime.withHour(0).withMinute(0).withSecond(0);
|
|
|
+ return temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的 00:00:00
|
|
|
+ * @param d1
|
|
|
+ * @return 返回字符串类型
|
|
|
+ */
|
|
|
+ public static String getStartTimeStr(Date d1) {
|
|
|
+ LocalDateTime startLocalDateTime = getStartLocalDateTime(d1);
|
|
|
+ return formatLocalDateTime(startLocalDateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String formatLocalDateTime(LocalDateTime dateTime) {
|
|
|
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(FULL_STYLE);
|
|
|
+ return dateTime.format(dateTimeFormatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的 23:59:59
|
|
|
+ * @param d1
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getEndTime(Date d1) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = d1.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime temp = localDateTime.withHour(23).withMinute(59).withSecond(59);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(temp.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取指定日期的 23:59:59
|
|
|
+ * @param d1
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static LocalDateTime getEndLocalDateTime(Date d1) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = d1.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime temp = localDateTime.withHour(23).withMinute(59).withSecond(59);
|
|
|
+ return temp;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String getEndTimeStr(Date d1) {
|
|
|
+ LocalDateTime endLocalDateTime = getEndLocalDateTime(d1);
|
|
|
+ return formatLocalDateTime(endLocalDateTime);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 给指定日期添加天数
|
|
|
+ * @param sourceDateTime
|
|
|
+ * @param addHour -小时,为减去小时数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date addHour(Date sourceDateTime, Long addHour) {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ Instant sourceInstant = sourceDateTime.toInstant();
|
|
|
+ LocalDateTime localDateTime = sourceInstant.atZone(zone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime1 = localDateTime.plusHours(addHour);
|
|
|
+ //将追加后的日期,转换为date
|
|
|
+ Date from = Date.from(localDateTime1.atZone(zone).toInstant());
|
|
|
+ return from;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 获取本年度的第一天 */
|
|
|
+ public static Date getThisYearFirst() {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ LocalDateTime firstDayOfYear = LocalDateTime.of(LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.firstDayOfYear())), LocalTime.MIN);
|
|
|
+ return Date.from(firstDayOfYear.atZone(zone).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取本年度的最后一天
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getThisYearLast() {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ LocalDateTime with = LocalDateTime.now().with(TemporalAdjusters.lastDayOfYear());
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.of(LocalDate.from(with), LocalTime.MAX);
|
|
|
+ return Date.from(localDateTime.atZone(zone).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前月份的月第一天
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getThisMonthFirst() {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ LocalDate localDate = LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth()));
|
|
|
+ LocalDateTime monthFirst = LocalDateTime.of(localDate, LocalTime.MIN);
|
|
|
+ return Date.from(monthFirst.atZone(zone).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前月份的最后一天
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static Date getThisMonthLast() {
|
|
|
+ ZoneId zone = ZoneId.systemDefault();
|
|
|
+ LocalDate localDate = LocalDate.from(LocalDateTime.now().with(TemporalAdjusters.lastDayOfMonth()));
|
|
|
+ LocalDateTime of = LocalDateTime.of(localDate, LocalTime.MAX);
|
|
|
+ return Date.from(of.atZone(zone).toInstant());
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Date parse(String startTime, String fullStyle) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(fullStyle);
|
|
|
+ LocalDate localDateTime = LocalDate.parse(startTime, formatter);
|
|
|
+ Instant instant = localDateTime.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
|
|
|
+ return Date.from(instant);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断日期是否在 范围内
|
|
|
+ * @param d1 比较日期
|
|
|
+ * @param d2 参照日期
|
|
|
+ * @param dayRange 天数范围
|
|
|
+ * @return 当d2减去d1的相差天数 在 dayRange范围内,返回true,否则返回false
|
|
|
+ */
|
|
|
+ public static boolean checkRange(Date d1, Date d2, Long dayRange) {
|
|
|
+ LocalDateTime d1DateTime = getLocalDateTime(d1);
|
|
|
+ LocalDateTime d2DateTime = getLocalDateTime(d2);
|
|
|
+ long until = d1DateTime.until(d2DateTime, ChronoUnit.DAYS); //得到两个日期差
|
|
|
+ if (until <= dayRange) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String formatterStr(Date date, String fullStyle) {
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(fullStyle);
|
|
|
+ return localDateTime.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static long subDay(Date startTimeDate, Date endTimeDate) {
|
|
|
+ // 获取两个日期之间的日期差
|
|
|
+ LocalDateTime d1DateTime = getLocalDateTime(startTimeDate);
|
|
|
+ LocalDateTime d2DateTime = getLocalDateTime(endTimeDate);
|
|
|
+ long until = d1DateTime.until(d2DateTime, ChronoUnit.DAYS);
|
|
|
+ return until;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|