|
@@ -3,9 +3,8 @@ package com.fs.common.utils;
|
|
import java.lang.management.ManagementFactory;
|
|
import java.lang.management.ManagementFactory;
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
-import java.time.Instant;
|
|
|
|
-import java.time.LocalDate;
|
|
|
|
-import java.time.ZoneId;
|
|
|
|
|
|
+import java.time.*;
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.time.temporal.ChronoUnit;
|
|
import java.util.Calendar;
|
|
import java.util.Calendar;
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
@@ -32,6 +31,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|
"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",
|
|
"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"};
|
|
|
|
+ private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
/**
|
|
/**
|
|
* 获取当前Date型日期
|
|
* 获取当前Date型日期
|
|
@@ -217,4 +217,52 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|
return daysBetween;
|
|
return daysBetween;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 获取指定日期当天的开始时间字符串 (格式: yyyy-MM-dd 00:00:00)
|
|
|
|
+ *
|
|
|
|
+ * @param date 输入的 Date 对象
|
|
|
|
+ * @return 当天开始时间的字符串表示,如果输入为 null 则返回 null
|
|
|
|
+ */
|
|
|
|
+ public static String getStartOfDayString(Date date) {
|
|
|
|
+ // 使用 Objects.requireNonNull(date, "输入日期不能为 null"); 如果希望在输入为 null 时抛出异常
|
|
|
|
+ if (date == null) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ // 1. 将 Date 转换为更现代的 LocalDateTime (考虑时区)
|
|
|
|
+ // 使用系统默认时区。如果需要特定时区,请替换 ZoneId.systemDefault()
|
|
|
|
+ // 例如:ZoneId.of("Asia/Shanghai")
|
|
|
|
+ LocalDateTime localDateTime = date.toInstant()
|
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
|
+ .toLocalDateTime();
|
|
|
|
+ // 2. 获取该日期的开始时间 (00:00:00)
|
|
|
|
+ LocalDateTime startOfDay = localDateTime.toLocalDate().atStartOfDay();
|
|
|
|
+ // 3. 格式化为目标字符串
|
|
|
|
+ return startOfDay.format(OUTPUT_FORMATTER);
|
|
|
|
+ }
|
|
|
|
+ /**
|
|
|
|
+ * 获取指定日期当天的结束时间字符串 (格式: yyyy-MM-dd 23:59:59)
|
|
|
|
+ *
|
|
|
|
+ * @param date 输入的 Date 对象
|
|
|
|
+ * @return 当天结束时间的字符串表示,如果输入为 null 则返回 null
|
|
|
|
+ */
|
|
|
|
+ public static String getEndOfDayString(Date date) {
|
|
|
|
+ if (date == null) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ // 1. 将 Date 转换为 LocalDateTime (考虑时区)
|
|
|
|
+ LocalDateTime localDateTime = date.toInstant()
|
|
|
|
+ .atZone(ZoneId.systemDefault())
|
|
|
|
+ .toLocalDateTime();
|
|
|
|
+ // 2. 获取该日期的 LocalDate 部分
|
|
|
|
+ LocalDate localDate = localDateTime.toLocalDate();
|
|
|
|
+ // 3. 创建当天的结束时间 (23:59:59)
|
|
|
|
+ LocalDateTime endOfDay = LocalDateTime.of(localDate, LocalTime.of(23, 59, 59));
|
|
|
|
+ // 注意: 如果需要的是一天的最后一纳秒 (23:59:59.999999999),可以使用:
|
|
|
|
+ // LocalDateTime endOfDay = LocalDateTime.of(localDate, LocalTime.MAX);
|
|
|
|
+ // 但根据 "23:59:59" 的要求,明确指定秒更符合。
|
|
|
|
+ // 4. 格式化为目标字符串
|
|
|
|
+ return endOfDay.format(OUTPUT_FORMATTER);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|