From 29a6cba58da9a794b042e70991b83dd771ee5519 Mon Sep 17 00:00:00 2001 From: hellozrh <455741807@qq.com> Date: Thu, 13 Jun 2024 14:44:53 +0800 Subject: [PATCH 1/2] =?UTF-8?q?DateUtil.format(Date=20date,=20String=20for?= =?UTF-8?q?mat)=E6=8E=A5=E5=8F=A3=E6=95=88=E7=8E=87=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/date/DateUtil.java | 2 +- .../cn/hutool/core/date/DateUtilTest.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index 74f907252..f005c04eb 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -522,7 +522,7 @@ public class DateUtil extends CalendarUtil { if (date instanceof DateTime) { timeZone = ((DateTime) date).getTimeZone(); } - return format(date, newSimpleFormat(format, null, timeZone)); + return format(date, FastDateFormat.getInstance(format)); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index 974182dc4..d61eea6c6 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1183,4 +1183,30 @@ public class DateUtilTest { final DateTime parse = DateUtil.parse(str); Assert.assertEquals("2023-12-11 10:42:04", Objects.requireNonNull(parse).toString()); } + + @Test + public void formatSpeedTest(){ + Date value = new Date(); + long t0 = System.currentTimeMillis(); + FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSSSSS"); + long t1 = System.currentTimeMillis(); + String strTime = null; + for(int i=0; i<5000; i++){ + strTime = DateUtil.format(value, "YYYY-MM-dd HH:mm:ss.SSSSSS"); + } + System.out.println("format="+strTime); + long t2 = System.currentTimeMillis(); + + for(int i=0; i<5000; i++){ + strTime = FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSSSSS").format(value); + } + System.out.println("FastDateFormat="+strTime); + + long t3 = System.currentTimeMillis(); + + System.out.println("t1-t0="+(t1-t0)); + System.out.println("t2-t1="+(t2-t1)); + System.out.println("t3-t2="+(t3-t2)); + } + } From 7232706ca6be028da6bba15022b2f84ace266d00 Mon Sep 17 00:00:00 2001 From: hellozrh <455741807@qq.com> Date: Thu, 13 Jun 2024 15:16:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=BF=98=E4=BA=86timeZ?= =?UTF-8?q?one=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=822.=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/date/DateUtil.java | 2 +- .../cn/hutool/core/date/DateUtilTest.java | 37 +++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index f005c04eb..3cf6b3628 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -522,7 +522,7 @@ public class DateUtil extends CalendarUtil { if (date instanceof DateTime) { timeZone = ((DateTime) date).getTimeZone(); } - return format(date, FastDateFormat.getInstance(format)); + return format(date, FastDateFormat.getInstance(format, timeZone)); } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index d61eea6c6..3de3f8700 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1188,25 +1188,40 @@ public class DateUtilTest { public void formatSpeedTest(){ Date value = new Date(); long t0 = System.currentTimeMillis(); - FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSSSSS"); + //此处先加载FastDateFormat对象,保存到FastDateFormat.CACHE中 + //解决后面两个for循环中保存到FastDateFormat对象创建未时差异的问题。 + FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSS"); + long t1 = System.currentTimeMillis(); String strTime = null; - for(int i=0; i<5000; i++){ - strTime = DateUtil.format(value, "YYYY-MM-dd HH:mm:ss.SSSSSS"); + for(int i=0; i<50000; i++){ + strTime = DateUtil.format(value, "YYYY-MM-dd HH:mm:ss.SSS"); } - System.out.println("format="+strTime); long t2 = System.currentTimeMillis(); - for(int i=0; i<5000; i++){ - strTime = FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSSSSS").format(value); + for(int i=0; i<50000; i++){ + strTime = FastDateFormat.getInstance("YYYY-MM-dd HH:mm:ss.SSS").format(value); } - System.out.println("FastDateFormat="+strTime); - long t3 = System.currentTimeMillis(); - System.out.println("t1-t0="+(t1-t0)); - System.out.println("t2-t1="+(t2-t1)); - System.out.println("t3-t2="+(t3-t2)); + long initTime = t1 - t0; + long formtTime1 = t2 - t1; + long formatTime2 = t3 - t2; + + //此处仍然不明白,两个for循环实际执行format方法都一样,为什么第1个for时间大致是第2个for的3倍。 + Assert.assertTrue(formtTime1 > formatTime2); +/** + * System.out.println("t1-t0="+(t1-t0)); + * System.out.println("t2-t1="+(t2-t1)); + * System.out.println("t3-t2="+(t3-t2)); + * + * 由日志可以看出,第1个for时间大致是第2个for的3倍 + * + * t1-t0=46 + * t2-t1=65 + * t3-t2=25 + */ + } }