将 ISO 8601 时间戳字符串转换为 java.time.OffsetDateTime

Converting ISO 8601 timestamp String to java.time.OffsetDateTime

假设我有一个 ISO 8601 格式的日期:"2017-01-10T14:55:32+01:00"

如何将其转换为 OffsetDateTime

我在这里没有找到任何答案。我试过以下:

public OffsetDateTime stringToOffsetDateTime() {
        return OffsetDateTime.from(Instant.parse("2019-12-12T10:39:40-02:00"));
    }

但它抛出 DateTimeParseException

最短的答案是:

OffsetDateTime.parse("2017-01-10T14:55+01:00")

它默认识别 ISO 8601 格式(使用 DateTimeFormatter.ISO_DATE_TIME)。

如果需要,您可以通过这种方式使用其他格式器:

OffsetDateTime.parse(iso8601String, DateTimeFormatter.ISO_OFFSET_DATE);

所有格式化程序都可以在这里浏览:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

OP 的尝试失败,因为使用了 Instant 的格式化程序。这自然会失败,因为 Instant 始终采用 UTC,因此即使可能,您也会丢失时区信息。