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

时间:2017-01-23 14:01:46

标签: java java-8 iso8601

假设我有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

1 个答案:

答案 0 :(得分:1)

最简短的答案是:

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中,因此即使可能,您也会丢失时区信息。