From d240756f01f60459e6ed1f9f107541353c22372e Mon Sep 17 00:00:00 2001 From: lifw Date: Wed, 26 Feb 2020 13:18:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A1=A5=E5=85=85String=E4=B8=8ELocalDateT?= =?UTF-8?q?ime=E4=BA=92=E7=9B=B8=E8=BD=AC=E6=8D=A2=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/date/DateUtil.java | 53 ++++++++++++++++++- .../cn/hutool/core/date/DateUtilTest.java | 16 ++++++ 2 files changed, 67 insertions(+), 2 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 a4276d43b..188c9db8a 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -513,7 +513,32 @@ public class DateUtil { } // ------------------------------------ Format start ---------------------------------------------- - + + /** + * 格式化日期时间
+ * 格式 yyyy-MM-dd HH:mm:ss + * + * @param localDateTime 被格式化的日期 + * @return 格式化后的字符串 + */ + public static String formatLocalDateTime(LocalDateTime localDateTime) { + return format(localDateTime, DatePattern.NORM_DATETIME_PATTERN); + } + + /** + * 根据特定格式格式化日期 + * @param localDateTime 被格式化的日期 + * @param format 日期格式,常用格式见: {@link DatePattern} + * @return 格式化后的字符串 + */ + public static String format(LocalDateTime localDateTime, String format) { + if (null == localDateTime || StrUtil.isBlank(format)) { + return null; + } + DateTimeFormatter df = DateTimeFormatter.ofPattern(format); + return localDateTime.format(df); + } + /** * 根据特定格式格式化日期 * @@ -668,7 +693,31 @@ public class DateUtil { // ------------------------------------ Format end ---------------------------------------------- // ------------------------------------ Parse start ---------------------------------------------- - + + /** + * 构建LocalDateTime对象
+ * 格式:yyyy-MM-dd HH:mm:ss + * + * @param dateStr 时间字符串(带格式) + * @return LocalDateTime对象 + */ + public static LocalDateTime parseLocalDateTime(CharSequence dateStr) { + return parseLocalDateTime(dateStr, DatePattern.NORM_DATETIME_PATTERN); + } + + /** + * 构建LocalDateTime对象 + * @param dateStr 时间字符串(带格式) + * @param format 使用{@link DatePattern}定义的格式 + * @return LocalDateTime对象 + */ + public static LocalDateTime parseLocalDateTime(CharSequence dateStr, String format) { + dateStr = normalize(dateStr); + DateTimeFormatter df = DateTimeFormatter.ofPattern(format); + LocalDateTime ldt = LocalDateTime.parse(dateStr,df); + return ldt; + } + /** * 构建DateTime对象 * 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 e77e00a34..5d992e5b1 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -658,4 +658,20 @@ public class DateUtilTest { boolean expired = DateUtil.isExpired(startDate, DateField.DAY_OF_YEAR, length, endDate); Assert.assertTrue(expired); } + + @Test + public void localDateTimeTest() { + // 测试字符串与LocalDateTime的互相转换 + String strDate = "2019-12-01 17:02:30"; + LocalDateTime ldt = DateUtil.parseLocalDateTime(strDate); + String strDate1 = DateUtil.formatLocalDateTime(ldt); + System.out.println(strDate1); + Assert.assertEquals(strDate, strDate1); + + strDate = "2019年12月01日 17:02:30.111"; + ldt = DateUtil.parseLocalDateTime(strDate, DatePattern.NORM_DATETIME_MS_PATTERN); + strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_MS_PATTERN); + System.out.println(strDate1); + Assert.assertEquals(strDate, strDate1); + } } From 20ffe321f1e624191a37ca2c4bd9bc68a2e5da19 Mon Sep 17 00:00:00 2001 From: lifw Date: Fri, 28 Feb 2020 14:06:51 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9Convert.toLocalDateTime?= =?UTF-8?q?(Object,=20LocalDatetime)=E6=96=B9=E6=B3=95=E7=9A=84=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=8F=8A=E8=BF=94=E5=9B=9E=E5=80=BC=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=EF=BC=9B2.=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AAConvert.toLocalD?= =?UTF-8?q?ateTime(Object)=E6=96=B9=E6=B3=95=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/convert/Convert.java | 18 ++++++++++--- .../hutool/core/convert/DateConvertTest.java | 26 ++++++++++++++++--- 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java index 5d2da2fdb..86f39143f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/Convert.java @@ -468,10 +468,10 @@ public class Convert { * @return 结果 * @since 5.0.7 */ - public static Date toLocalDateTime(Object value, Date defaultValue) { + public static LocalDateTime toLocalDateTime(Object value, LocalDateTime defaultValue) { return convertQuietly(LocalDateTime.class, value, defaultValue); } - + /** * Instant
* 如果给定的值为空,或者转换失败,返回默认值
@@ -498,7 +498,19 @@ public class Convert { public static Date toDate(Object value) { return toDate(value, null); } - + + /** + * 转换为LocalDateTime
+ * 如果给定的值为空,或者转换失败,返回null
+ * 转换失败不会报错 + * + * @param value 被转换的值 + * @return 结果 + */ + public static LocalDateTime toLocalDateTime(Object value) { + return toLocalDateTime(value, null); + } + /** * 转换为Enum对象
* 如果给定的值为空,或者转换失败,返回默认值
diff --git a/hutool-core/src/test/java/cn/hutool/core/convert/DateConvertTest.java b/hutool-core/src/test/java/cn/hutool/core/convert/DateConvertTest.java index 978ab9b4d..2cf4036e3 100644 --- a/hutool-core/src/test/java/cn/hutool/core/convert/DateConvertTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/convert/DateConvertTest.java @@ -1,13 +1,15 @@ package cn.hutool.core.convert; -import cn.hutool.core.date.DateUtil; -import org.junit.Assert; -import org.junit.Test; - +import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.Date; +import org.junit.Assert; +import org.junit.Test; + +import cn.hutool.core.date.DateUtil; + public class DateConvertTest { @Test @@ -51,4 +53,20 @@ public class DateConvertTest { java.sql.Date value2 = Convert.convert(java.sql.Date.class, timeLong); Assert.assertEquals(timeLong, value2.getTime()); } + + @Test + public void toLocalDateTimeTest() { + Date src = new Date(); + + LocalDateTime ldt = Convert.toLocalDateTime(src); + Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src)); + + Timestamp ts = Timestamp.from(src.toInstant()); + ldt = Convert.toLocalDateTime(ts); + Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src)); + + String str = "2020-12-12 12:12:12.0"; + ldt = Convert.toLocalDateTime(str); + Assert.assertEquals(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")), str); + } }