将 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,因此即使可能,您也会丢失时区信息。
假设我有一个 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,因此即使可能,您也会丢失时区信息。