在@Tunaki的回答中,我提到了一个问题。因为xs:dateTime
不允许基于秒的区域偏移量。所以正确的模式应该只包括[XXX]
,这基于appendPattern的文档说明。
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss[XXX]")
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
.toFormatter();
以下是时区格式的列表:
Pattern Count Equivalent builder methods
O 1 appendLocalizedOffset(TextStyle.SHORT)
OOOO 4 appendLocalizedOffset(TextStyle.FULL)
X 1 appendOffset("+HHmm","Z")
XX 2 appendOffset("+HHMM","Z")
XXX 3 appendOffset("+HH:MM","Z")
XXXX 4 appendOffset("+HHMMss","Z")
XXXXX 5 appendOffset("+HH:MM:ss","Z")
x 1 appendOffset("+HHmm","+00")
xx 2 appendOffset("+HHMM","+0000")
xxx 3 appendOffset("+HH:MM","+00:00")
xxxx 4 appendOffset("+HHMMss","+0000")
xxxxx 5 appendOffset("+HH:MM:ss","+00:00")
Z 1 appendOffset("+HHMM","+0000")
ZZ 2 appendOffset("+HHMM","+0000")
ZZZ 3 appendOffset("+HHMM","+0000")
ZZZZ 4 appendLocalizedOffset(TextStyle.FULL)
ZZZZZ 5 appendOffset("+HH:MM:ss","Z")
xs:date
、xs:dateTime
和xs:time
? - peterhxs:dateTime
的正确模式是[XXX]
(而不是 5 个 X,而是 3 个 X),因为xs:dateTime
不允许基于秒的区域偏移。 - b4handXXX
等同于appendOffset("+HH:MM","Z")
。请参阅 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatterBuilder.html#appendPattern(java.lang.String)。 - b4hand