From a4fba3e4295d3b544ec3f1c7a8b5b9f7edbe3e4c Mon Sep 17 00:00:00 2001 From: emptypoint <1215582715@qq.com> Date: Sat, 17 Dec 2022 15:17:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96TimeUtil=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E7=B1=BB:=201.=E4=BC=98=E5=8C=96parse=E6=96=B9=E6=B3=95;=202.?= =?UTF-8?q?=E6=8A=BD=E5=8F=96=E5=B8=B8=E9=87=8F;=203.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=B3=A8=E9=87=8A;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/date/LocalTimeUtil.java | 6 ++- .../java/cn/hutool/core/date/TimeUtil.java | 46 ++++++++++--------- .../java/cn/hutool/core/regex/ReUtil.java | 7 ++- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/LocalTimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/LocalTimeUtil.java index 1da718811..832db93de 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/LocalTimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/LocalTimeUtil.java @@ -9,6 +9,10 @@ import java.time.LocalTime; * @since 6.0.0 */ public class LocalTimeUtil { + /** + * 只有时分秒的最大时间 + */ + public static final LocalTime MAX_HMS = LocalTime.of(23, 59, 59); /** * 获取最大时间,提供参数是否将毫秒归零 @@ -21,6 +25,6 @@ public class LocalTimeUtil { * @return {@link LocalTime}时间最大值 */ public static LocalTime max(final boolean truncateMillisecond) { - return truncateMillisecond ? LocalTime.of(23, 59, 59) : LocalTime.MAX; + return truncateMillisecond ? MAX_HMS : LocalTime.MAX; } } diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java index 1ce45a357..fbc0a95c0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java @@ -1,7 +1,6 @@ package cn.hutool.core.date; import cn.hutool.core.date.format.GlobalCustomFormat; -import cn.hutool.core.regex.ReUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ObjUtil; @@ -17,7 +16,6 @@ import java.time.ZonedDateTime; import java.time.chrono.ChronoLocalDate; import java.time.chrono.ChronoLocalDateTime; import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.time.temporal.Temporal; @@ -37,6 +35,10 @@ import java.util.TimeZone; * @since 6.0.0 */ public class TimeUtil extends TemporalAccessorUtil { + /** + * UTC 的 ZoneID + */ + public static final ZoneId ZONE_ID_UTC = ZoneId.of("UTC"); /** * 当前时间,默认时区 @@ -63,7 +65,7 @@ public class TimeUtil extends TemporalAccessorUtil { * @return {@link LocalDateTime} */ public static LocalDateTime ofUTC(final Instant instant) { - return of(instant, ZoneId.of("UTC")); + return of(instant, ZONE_ID_UTC); } /** @@ -271,16 +273,14 @@ public class TimeUtil extends TemporalAccessorUtil { // fix issue#1082 //see https://stackoverflow.com/questions/22588051/is-java-time-failing-to-parse-fraction-of-second // jdk8 bug at: https://bugs.openjdk.java.net/browse/JDK-8031085 - if (StrUtil.startWithIgnoreEquals(format, DatePattern.PURE_DATETIME_PATTERN)) { - final String fraction = StrUtil.removePrefix(format, DatePattern.PURE_DATETIME_PATTERN); - if (ReUtil.isMatch("[S]{1,2}", fraction)) { + if (StrUtil.startWithIgnoreEquals(format, DatePattern.PURE_DATETIME_PATTERN) && format.endsWith("S")) { + // 需要填充的0的个数 + final int paddingWidth = 3 - (format.length() - DatePattern.PURE_DATETIME_PATTERN.length()); + if (paddingWidth > 0) { //将yyyyMMddHHmmssS、yyyyMMddHHmmssSS的日期统一替换为yyyyMMddHHmmssSSS格式,用0补 - text += StrUtil.repeat('0', 3 - fraction.length()); + text += StrUtil.repeat('0', paddingWidth); } - formatter = new DateTimeFormatterBuilder() - .appendPattern(DatePattern.PURE_DATETIME_PATTERN) - .appendValue(ChronoField.MILLI_OF_SECOND, 3) - .toFormatter(); + formatter = DatePattern.PURE_DATETIME_MS_FORMATTER; } else { formatter = DateTimeFormatter.ofPattern(format); } @@ -437,42 +437,46 @@ public class TimeUtil extends TemporalAccessorUtil { } /** - * 修改为本月的开始时间,例如:2020-02-01 00:00:00,000 + * 修改为月初的开始时间,例如:2020-02-01 00:00:00,000 * * @param time 日期时间 - * @return 一天的开始时间 + * @return 月初的开始时间 + * @since 6.0.0 */ public static LocalDateTime beginOfMonth(final LocalDateTime time) { return beginOfDay(time).with(TemporalAdjusters.firstDayOfMonth()); } /** - * 获取给定日期月底的时间 + * 修改为月底的结束时间 * * @param time 日期时间 * @param truncateMillisecond 是否毫秒归零 - * @return 月底 + * @return 月底的结束时间 + * @since 6.0.0 */ public static LocalDateTime endOfMonth(final LocalDateTime time, final boolean truncateMillisecond) { return endOfDay(time, truncateMillisecond).with(TemporalAdjusters.lastDayOfMonth()); } /** - * 修改为本年的开始时间,例如:2020-01-01 00:00:00,000 + * 修改为一年的开始时间,例如:2020-01-01 00:00:00,000 * * @param time 日期时间 * @return 一年的开始时间 + * @since 6.0.0 */ public static LocalDateTime beginOfYear(final LocalDateTime time) { return beginOfDay(time).with(TemporalAdjusters.firstDayOfYear()); } /** - * 获取给定日期年底的时间 + * 修改为一年的结束时间 * * @param time 日期时间 * @param truncateMillisecond 是否毫秒归零 - * @return 年底 + * @return 一年的结束时间 + * @since 6.0.0 */ public static LocalDateTime endOfYear(final LocalDateTime time, final boolean truncateMillisecond) { return endOfDay(time, truncateMillisecond).with(TemporalAdjusters.lastDayOfYear()); @@ -543,8 +547,8 @@ public class TimeUtil extends TemporalAccessorUtil { * * * @param date 日期({@link LocalDate} 或者 {@link LocalDateTime}等) @@ -564,7 +568,7 @@ public class TimeUtil extends TemporalAccessorUtil { * @since 5.8.5 */ public static boolean isSameDay(final ChronoLocalDateTime date1, final ChronoLocalDateTime date2) { - return date1 != null && date2 != null && isSameDay(date1.toLocalDate(), date2.toLocalDate()); + return date1 != null && date2 != null && date1.toLocalDate().isEqual(date2.toLocalDate()); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/regex/ReUtil.java b/hutool-core/src/main/java/cn/hutool/core/regex/ReUtil.java index c31bc2c7e..065804671 100755 --- a/hutool-core/src/main/java/cn/hutool/core/regex/ReUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/regex/ReUtil.java @@ -793,11 +793,11 @@ public class ReUtil { /** * 从字符串中获得第一个整数 * - * @param StringWithNumber 带数字的字符串 + * @param stringWithNumber 带数字的字符串 * @return 整数 */ - public static Integer getFirstNumber(final CharSequence StringWithNumber) { - return Convert.toInt(get(PatternPool.NUMBERS, StringWithNumber, 0), null); + public static Integer getFirstNumber(final CharSequence stringWithNumber) { + return Convert.toInt(get(PatternPool.NUMBERS, stringWithNumber, 0), null); } /** @@ -818,7 +818,6 @@ public class ReUtil { return true; } - // Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); final Pattern pattern = PatternPool.get(regex, Pattern.DOTALL); return isMatch(pattern, content); }