我遇到問題,解析一個特殊的字符串表示一年和一個月份,像這樣的偏移量:2014-08+03:00
。Java DateTimeFormatter解析YearMonth與偏移量
期望的輸出是YearMonth
。
我已經測試過創建具有各種圖案的自定義DateTimeFormatter
,但它失敗並且引發了DateTimeParseException
。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMZ");
TemporalAccessor temporalAccessor = YearMonth.parse(month, formatter);
YearMonth yearMonth = YearMonth.from(temporalAccessor);
此特定格式的正確模式是什麼?
它甚至有可能創造一個DateTimeFormatter
來解析這個String
,或者我應該操作字符串"2014-08+03:00"
並刪除手動偏移"2014-08"
,然後將其解析爲YearMonth
(或其他一些java.time
類)?
編輯:
我進一步研究其中屬性被列爲<xs:attribute name="month" type="xs:gYearMonth"/>
在命名空間是xmlns:xs="http://www.w3.org/2001/XMLSchema">
因此很明顯,該屬性的類型的API和它的.xsd架構文件是DataTypeConstans.GYEARMONTH哪裏「2014-08 + 03:00」是有效的格式。
This回答解釋瞭如何將String
轉換爲XMLGregorianCalendar
,從那裏可以通過OffsetDateTime
轉換爲YearMonth
。
XMLGregorianCalendar result = DatatypeFactory.newInstance().newXMLGregorianCalendar("2014-08+03:00");
YearMonth yearMonth = YearMonth.from(result.toGregorianCalendar().toZonedDateTime().toOffsetDateTime());
但是我仍然好奇,如果有可能只使用自定義java.time.DateTimeFormatter
直接解析字符串"2014-08+03:00"
到YearMonth
。
'YearMonth'不包含時區信息... – assylias
是的,我知道,我想知道爲什麼API包含偏移量,而我自己也不需要偏移量。 @assylias – andnyl