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/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/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); + } } 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); + } }