更正 java.time XMLGregorianCalendar 表示

Correct java.time representation of XMLGregorianCalendar

我有一个包含以下内容的 XML 元素:

<lastModified>2019-10-09T19:20:45.677+02:00</lastModified>

这映射到 Java 的 XMLGregorianCalendar

我需要在适当的 java.time 实例中转换此值。

我有点困惑 java.time class 是这个 XMLGregorianCalendar 值的“正确”(即无损)表示。

我想应该是 ZonedDateTime 还是 OffsetDateTime 更好?

您拥有的 String ("2019-10-09T19:20:45.677+02:00") 是 ISO 格式,甚至不需要额外的格式化程序来解析它。使用 OffsetDateTime 的主要原因是最后 6 个字符:+02:00,表示与 UTC 的偏移量为 2 小时(实际上可能不止一个时区同时具有此偏移量) ).

您可以像这样将此值转换为 适当的 java.time 实例,例如:

public static void main(String[] args) throws DatatypeConfigurationException {
    // your example datetime
    String lastModified = "2019-10-09T19:20:45.677+02:00";
    // create an XMLGregorianCalendar for example purpose
    XMLGregorianCalendar xmlGC = DatatypeFactory.newInstance()
                                                .newXMLGregorianCalendar(lastModified);
    // print it once in order to see the values
    System.out.println("XMLGregorianCalendar: " + xmlGC.toString());
    // parse its toString() method to an OffsetDateTime
    OffsetDateTime lastModOdt = OffsetDateTime.parse(xmlGC.toString());
    // format the content of the OffsetDateTime in ISO standard
    System.out.println("OffsetDateTime:       " 
            + lastModOdt.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
}

输出:

XMLGregorianCalendar: 2019-10-09T19:20:45.677+02:00
OffsetDateTime:       2019-10-09T19:20:45.677+02:00

这应该是正确的(不丢失任何信息就足够无损)。