2

我试图以LocalDateTime这种方式用java(在Scala中)解析这样的日期“2020-07-01T00:00:00Z”:

LocalDateTime.parse("2020-07-01T00:00:00Z", ISO_INSTANT)

但我得到了这个例外:

java.time.format.DateTimeParseException: Text '2020-07-01T00:00:00Z' could not be parsed: Unable to obtain LocalDate from TemporalAccessor

这里可能是什么问题?

这些是我的图书馆:

import java.time.format.DateTimeFormatter._
import java.time.LocalDateTime
4

2 回答 2

3

您不应该使用ISO_INSTANT格式化程序,因为该格式化程序用于解析为Instants,而您需要LocalDateTime.

你应该使用另一个DateTimeFormatter. 这里有一些选择。所有这些都是ISO_INSTANT格式的“超集”。


或者,将字符串解析为Instant第一个,然后:

instant.atZone(ZoneOffset.UTC).toLocalDateTime()
于 2020-07-03T05:23:52.760 回答
2

您需要指定LocalDateTime与解析相关的区域。

LocalDateTime.parse("2020-07-01T00:00:00Z",
        DateTimeFormatter.ISO_INSTANT.withZone(ZoneId.systemDefault()));

ALocalDateTime不存储区域信息,但抽象地说,它无论如何都与一个相关。从同一个UTC时间戳可以解析出多个LocalDateTimes,即加/减特定(本地)时区的时间偏移量。

不要误解这一点ZonedDateTime。AZonedDateTime存储区域信息,因此它与 UTC 时间戳具有 1:1 的关系。UTC 时间戳与 s 具有 1:n 的关系LocalDateTime

于 2020-07-03T05:24:13.897 回答