From 7c8278fce664c2e3eb9421561896533577b869f8 Mon Sep 17 00:00:00 2001 From: MagicJson Date: Thu, 11 Jul 2024 00:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98SimpleDateFormat=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E7=9A=84Map=EF=BC=8C=E5=8E=9F=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=AF=8F=E6=AC=A1new=E6=B6=88=E8=80=97=E6=80=A7=E8=83=BD=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=90=8E=E6=8F=90=E5=8D=87=E6=80=A7=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BF=9D=E8=AF=81=E7=BA=BF=E7=A8=8B=E5=AE=89=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/DateUtils.java | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 20dbbb746..1f1952d86 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -1,15 +1,16 @@ package com.ruoyi.common.utils; +import org.apache.commons.lang3.time.DateFormatUtils; +import org.springframework.util.StringUtils; + import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; +import java.time.*; import java.util.Date; -import org.apache.commons.lang3.time.DateFormatUtils; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; /** * 时间工具类 @@ -33,6 +34,8 @@ 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"}; + // 缓存SimpleDateFormat实例的Map,其中每个格式字符串对应一个ThreadLocal + private static final Map> dateFormatMap = new HashMap<>(); /** * 获取当前Date型日期 * @@ -73,11 +76,39 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils return parseDateToStr(YYYY_MM_DD, date); } - public static final String parseDateToStr(final String format, final Date date) - { - return new SimpleDateFormat(format).format(date); + + /** + * 原代码每次new消耗性能 修改后提升性能并保证线程安全 + * 将给定日期格式化为指定格式的字符串 + * @param format 日期格式字符串,例如 "yyyy-MM-dd" + * @param date 需要格式化的日期对象 + * @return 格式化后的日期字符串 + * @throws IllegalArgumentException 如果格式字符串或日期对象为空时抛出 + */ + public static String parseDateToStr(final String format, final Date date) { + if (!StringUtils.hasLength(format)) { + throw new IllegalArgumentException("Format must not be null or empty"); + } + if (Objects.isNull(date)) { + throw new IllegalArgumentException("Date must not be null"); + } + return getDateFormat(format).format(date); } + /** + * 获取与指定格式关联的SimpleDateFormat实例 + * 如果Map中不存在该格式的实例,则创建一个新的实例并存入Map + * @param format 日期格式字符串 + * @return 与指定格式关联的SimpleDateFormat实例 + */ + private static SimpleDateFormat getDateFormat(final String format) { + return dateFormatMap + .computeIfAbsent(format + , k -> ThreadLocal.withInitial(() -> new SimpleDateFormat(k))) + .get(); + } + + public static final Date dateTime(final String format, final String ts) { try