2017-01-23 98 views
-2

假设我有ISO 8601格式的日期:"2017-01-10T14:55:32+01:00"。如何将其转换为OffsetDateTime将ISO 8601时间戳字符串转换为java.time.OffsetDateTime

我还没有在这里找到任何答案。我尝试以下操作:

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

但它抛出DateTimeParseException

+3

'OffsetDateTime.parse(“2017-01-10T14:55:32 + 01:00”,DateTimeFormatter.ISO_DATE_TIME)' –

+0

我不明白downvotes - 请提供意见如何我可以改进问题 – kiedysktos

+1

lemme guess ,降薪可能是因为你没有表现出努力;通常我们希望提问者在这个问题上的最佳尝试,这对于帮助来说确实是一个更好的起点。现在你已经把它放在答案中了。 :-) –

回答

0

最简短的回答是:

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

它在默认情况下(使用DateTimeFormatter.ISO_DATE_TIME)识别ISO 8601的格式。

如果需要,您可以使用这种方式与其他formaters:

OffsetDateTime.parse(iso8601String, DateTimeFormatter.ISO_OFFSET_DATE); 

所有formaters可以在这里浏览:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

从OP的尝试已经失败,因为从使用即时格式化。这种情况自然失败了,因为Instant始终以UTC为单位,所以即使可能,您也会丢失时区信息。

相关问题