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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (164)

我只是试图将日期字符串转换为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

提问于
用户回答回答于

事实证明,Java并不接受一个纯粹的Date值作为DateTime。使用LocalDate而不是LocalDateTime解决了这个问题:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
LocalDate dt = LocalDate.parse("20140218", formatter);
用户回答回答于

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

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

扫码关注云+社区