2017-01-23 159 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爲單位,所以即使可能,您也會丟失時區信息。

相關問題