|
|
@@ -2,6 +2,9 @@ package com.nb.core.utils;
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
@@ -14,13 +17,13 @@ import java.util.Date;
|
|
|
public class DateCompareUtil {
|
|
|
|
|
|
/**
|
|
|
- * 按年月日时分秒进行比较,忽略毫秒部分
|
|
|
+ * 按年月日时分进行比较,忽略秒和毫秒部分,时区为东八区
|
|
|
*
|
|
|
* @param date1 第一个日期
|
|
|
* @param date2 第二个日期
|
|
|
- * @return 如果两个日期的年月日时分秒相同返回true,否则返回false
|
|
|
+ * @return 如果两个日期的年月日时分相同返回true,否则返回false
|
|
|
*/
|
|
|
- public static boolean isSameDateTimeIgnoreMillis(Date date1, Date date2) {
|
|
|
+ public static boolean isSameDateTimeIgnoreSeconds(Date date1, Date date2) {
|
|
|
if (date1 == null && date2 == null) {
|
|
|
return true;
|
|
|
}
|
|
|
@@ -28,8 +31,13 @@ public class DateCompareUtil {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- String format = "yyyy-MM-dd HH:mm:ss";
|
|
|
- return DateUtil.format(date1, format).equals(DateUtil.format(date2, format));
|
|
|
+ // 转换为东八区 LocalDateTime
|
|
|
+ ZoneId chinaZone = ZoneId.of("Asia/Shanghai");
|
|
|
+ LocalDateTime localDateTime1 = date1.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime2 = date2.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
+ return localDateTime1.format(formatter).equals(localDateTime2.format(formatter));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -47,11 +55,35 @@ public class DateCompareUtil {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- return DateUtil.isSameDay(date1, date2);
|
|
|
+ // 转换为东八区进行比较
|
|
|
+ ZoneId chinaZone = ZoneId.of("Asia/Shanghai");
|
|
|
+ LocalDateTime localDateTime1 = date1.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime2 = date2.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+
|
|
|
+ return localDateTime1.toLocalDate().equals(localDateTime2.toLocalDate());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 按年月日时分秒毫秒进行精确比较
|
|
|
+ * 按年月日时分秒进行比较,忽略毫秒部分
|
|
|
+ *
|
|
|
+ * @param date1 第一个日期
|
|
|
+ * @param date2 第二个日期
|
|
|
+ * @return 如果两个日期的年月日时分秒相同返回true,否则返回false
|
|
|
+ */
|
|
|
+ public static boolean isSameDateTimeIgnoreMillis(Date date1, Date date2) {
|
|
|
+ if (date1 == null && date2 == null) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (date1 == null || date2 == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ String format = "yyyy-MM-dd HH:mm:ss";
|
|
|
+ return DateUtil.format(date1, format).equals(DateUtil.format(date2, format));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 按年月日时分秒毫秒进行精确比较,时区为东八区
|
|
|
*
|
|
|
* @param date1 第一个日期
|
|
|
* @param date2 第二个日期
|
|
|
@@ -65,6 +97,24 @@ public class DateCompareUtil {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- return date1.equals(date2);
|
|
|
+ // 转换为东八区进行比较
|
|
|
+ ZoneId chinaZone = ZoneId.of("Asia/Shanghai");
|
|
|
+ LocalDateTime localDateTime1 = date1.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+ LocalDateTime localDateTime2 = date2.toInstant().atZone(chinaZone).toLocalDateTime();
|
|
|
+
|
|
|
+ return localDateTime1.equals(localDateTime2);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将Date转换为年月日时分字符串形式,时区为东八区
|
|
|
+ *
|
|
|
+ * @param date 待转换的日期
|
|
|
+ * @return 格式为"yyyy-MM-dd HH:mm"的字符串
|
|
|
+ */
|
|
|
+ public static Date convertToyyyyMMddHHmm(Date date) {
|
|
|
+ if (date == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return DateUtil.beginOfMinute(date);
|
|
|
}
|
|
|
}
|