解析 LocalDateTime 时无法从 TemporalAccessor 获取 LocalDateTime (Java 8)

2022-08-31 05:56:50

我只是尝试在Java 8中将日期字符串转换为DateTime对象。运行以下行时:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime dt = LocalDateTime.parse("20140218", formatter);

我收到以下错误:

Exception in thread "main" java.time.format.DateTimeParseException: 
Text '20140218' could not be parsed: 
Unable to obtain LocalDateTime from TemporalAccessor: 
{},ISO resolved to 2014-02-18 of type java.time.format.Parsed
    at java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:1918)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1853)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)

语法与此处建议的语法相同,但我有一个例外。我正在使用.JDK-8u25


答案 1

事实证明,Java不接受裸日期值作为DateTime。使用LocalDate而不是LocalDateTime可以解决问题:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate dt = LocalDate.parse("20140218", formatter);

答案 2

如果确实需要将日期转换为 LocalDateTime 对象,则可以使用 LocalDate.atStartOfDay()。这将在指定日期为您提供一个 LocalDateTime 对象,将小时、分钟和秒字段设置为 0:

final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDateTime time = LocalDate.parse("20140218", formatter).atStartOfDay();