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