Spring Boot 將yyyy-MM-dd格式的文本字符串直接轉換爲LocalDateTime出現的問題

問題復現

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

可參考文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章