diff --git a/CHANGELOG.md b/CHANGELOG.md
index 49287c643..1466c14cd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@
### 新特性
### Bug修复
* 【setting】 修复Props.toBean方法null的问题
+* 【core 】 修复DataUtil.parseLocalDateTime无时间部分报错问题(issue#I1B18H@Gitee)
-------------------------------------------------------------------------------------------------------------
diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java
index 3375ff62d..8943fb888 100644
--- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java
+++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/TemporalAccessorConverter.java
@@ -17,6 +17,7 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Date;
+import java.util.Objects;
/**
* JDK8中新加入的java.time包对象解析转换器
@@ -114,7 +115,7 @@ public class TemporalAccessorConverter extends AbstractConverter
* 格式 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}
+ * @param format 日期格式,常用格式见: {@link DatePattern}
* @return 格式化后的字符串
*/
public static String format(LocalDateTime localDateTime, String format) {
@@ -538,7 +540,7 @@ public class DateUtil {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
return localDateTime.format(df);
}
-
+
/**
* 根据特定格式格式化日期
*
@@ -693,30 +695,36 @@ 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}定义的格式
+ * @param format 使用{@link DatePattern}定义的格式
* @return LocalDateTime对象
*/
public static LocalDateTime parseLocalDateTime(CharSequence dateStr, String format) {
dateStr = normalize(dateStr);
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
- return LocalDateTime.parse(dateStr,df);
+ try {
+ return LocalDateTime.parse(dateStr, df);
+ } catch (DateTimeParseException e) {
+ // 在给定日期字符串没有时间部分时,LocalDateTime会报错,此时使用LocalDate中转转换
+ return LocalDate.parse(dateStr, df).atStartOfDay();
+ }
}
-
+
/**
* 构建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 1d1fab4a4..b0305d3e7 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
@@ -680,4 +680,12 @@ public class DateUtilTest {
strDate1 = DateUtil.format(ldt, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals(strDate, strDate1);
}
+
+ @Test
+ public void localDateTimeTest2() {
+ // 测试字符串与LocalDateTime的互相转换
+ String strDate = "2019-12-01";
+ final LocalDateTime localDateTime = DateUtil.parseLocalDateTime(strDate, "yyyy-MM-dd");
+ Assert.assertEquals(strDate, DateUtil.format(localDateTime, DatePattern.NORM_DATE_PATTERN));
+ }
}