問題復現
Exception in thread "main" java.time.format.DateTimeParseException: Text '2020-03-12' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2020-03-12 of type java.time.format.Parsed
at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1920)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1855)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at demo.LocalDateTimeUtils.parseString(LocalDateTimeUtils.java:22)
at demo.DateTimeDemo.main(DateTimeDemo.java:12)
Caused by: java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: {},ISO resolved to 2020-03-12 of type java.time.format.Parsed
at java.time.LocalDateTime.from(LocalDateTime.java:461)
at java.time.format.Parsed.query(Parsed.java:226)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
... 3 more
Caused by: java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: {},ISO resolved to 2020-03-12 of type java.time.format.Parsed
at java.time.LocalTime.from(LocalTime.java:409)
at java.time.LocalDateTime.from(LocalDateTime.java:457)
... 5 more
問題解決
解決方案:先將文本字符串日期轉化爲LocalDate類型,再將LocalDate轉化爲LocalDateTime
LocalDateTimeUtils.parseStringToLocalDateTime(
couponForm.getStartTime(), DateTimeFormatPatternConstants.YYYY_MM_DD)
/**
* 解析字符串爲日期
* <p>
* 說明:
* 1. 該方法主要解決yyyy-MM-dd格式文本字符串無法直接轉換爲LocalDateTime的問題
*
* @param source 需要解析的日期字符串
* @param formatPattern 日期格式化模式
* @return 格式化後的日期
*/
public static LocalDateTime parseStringToLocalDateTime(String source, String formatPattern) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatPattern);
LocalDate localDate = LocalDate.parse(source, dateTimeFormatter);
return localDate.atStartOfDay();
}
java.time.LocalDate.atStartOfDay()
方法將此日期與午夜時間組合在一起,以便在此日期開始時創建LocalDateTime