diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/TemporalUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/TemporalUtil.java
index 178d2486e..163acbcaa 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/date/TemporalUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/TemporalUtil.java
@@ -61,6 +61,7 @@ public class TemporalUtil {
* @param unit 被转换的{@link TimeUnit}单位,如果为{@code null}返回{@code null}
* @return {@link ChronoUnit}
* @since 5.7.16
+ * @throws IllegalArgumentException Unknown TimeUnit
*/
public static ChronoUnit toChronoUnit(final TimeUnit unit) throws IllegalArgumentException {
if (null == unit) {
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java
index e550092ac..4dda31424 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/TimeUtil.java
@@ -444,6 +444,16 @@ public class TimeUtil extends TemporalAccessorUtil {
return time.with(LocalTime.MIN);
}
+ /**
+ * 修改为一天的开始时间,例如:2020-02-02 00:00:00,000
+ *
+ * @param date 日期
+ * @return 一天的开始时间
+ */
+ public static LocalDateTime beginOfDay(final LocalDate date) {
+ return date.atStartOfDay();
+ }
+
/**
* 修改为一天的结束时间,例如:
*
@@ -460,6 +470,22 @@ public class TimeUtil extends TemporalAccessorUtil {
return time.with(LocalTimeUtil.max(truncateMillisecond));
}
+ /**
+ * 修改为一天的结束时间,例如:
+ *
+ * - 毫秒不归零:2020-02-02 23:59:59,999
+ * - 毫秒归零:2020-02-02 23:59:59,000
+ *
+ *
+ * @param date 日期
+ * @param truncateMillisecond 是否毫秒归零
+ * @return 一天的结束时间
+ * @since 5.7.18
+ */
+ public static LocalDateTime endOfDay(final LocalDate date, final boolean truncateMillisecond) {
+ return LocalDateTime.of(date, LocalTimeUtil.max(truncateMillisecond));
+ }
+
/**
* 修改为月初的开始时间,例如:2020-02-01 00:00:00,000
*
@@ -468,7 +494,18 @@ public class TimeUtil extends TemporalAccessorUtil {
* @since 6.0.0
*/
public static LocalDateTime beginOfMonth(final LocalDateTime time) {
- return beginOfDay(time).with(TemporalAdjusters.firstDayOfMonth());
+ return beginOfDay(beginOfMonth(time.toLocalDate()));
+ }
+
+ /**
+ * 修改为月初的开始时间,例如:2020-02-01 00:00:00,000
+ *
+ * @param date 日期
+ * @return 月初的开始时间
+ * @since 6.0.0
+ */
+ public static LocalDate beginOfMonth(final LocalDate date) {
+ return date.with(TemporalAdjusters.firstDayOfMonth());
}
/**
@@ -480,7 +517,18 @@ public class TimeUtil extends TemporalAccessorUtil {
* @since 6.0.0
*/
public static LocalDateTime endOfMonth(final LocalDateTime time, final boolean truncateMillisecond) {
- return endOfDay(time, truncateMillisecond).with(TemporalAdjusters.lastDayOfMonth());
+ return endOfDay(endOfMonth(time.toLocalDate()), truncateMillisecond);
+ }
+
+ /**
+ * 修改为月底的结束时间
+ *
+ * @param date 日期
+ * @return 月底的结束时间
+ * @since 6.0.0
+ */
+ public static LocalDate endOfMonth(final LocalDate date) {
+ return date.with(TemporalAdjusters.lastDayOfMonth());
}
/**
@@ -491,7 +539,18 @@ public class TimeUtil extends TemporalAccessorUtil {
* @since 6.0.0
*/
public static LocalDateTime beginOfYear(final LocalDateTime time) {
- return beginOfDay(time).with(TemporalAdjusters.firstDayOfYear());
+ return beginOfDay(beginOfYear(time.toLocalDate()));
+ }
+
+ /**
+ * 修改为一年的开始时间,例如:2020-01-01 00:00:00,000
+ *
+ * @param date 日期
+ * @return 一年的开始时间
+ * @since 6.0.0
+ */
+ public static LocalDate beginOfYear(final LocalDate date) {
+ return date.with(TemporalAdjusters.firstDayOfYear());
}
/**
@@ -503,7 +562,18 @@ public class TimeUtil extends TemporalAccessorUtil {
* @since 6.0.0
*/
public static LocalDateTime endOfYear(final LocalDateTime time, final boolean truncateMillisecond) {
- return endOfDay(time, truncateMillisecond).with(TemporalAdjusters.lastDayOfYear());
+ return endOfDay(endOfYear(time.toLocalDate()), truncateMillisecond);
+ }
+
+ /**
+ * 修改为一年的结束时间
+ *
+ * @param date 日期
+ * @return 一年的结束时间
+ * @since 6.0.0
+ */
+ public static LocalDate endOfYear(final LocalDate date) {
+ return date.with(TemporalAdjusters.lastDayOfYear());
}
/**