更正 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
这应该是正确的(不丢失任何信息就足够无损)。
我有一个包含以下内容的 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
这应该是正确的(不丢失任何信息就足够无损)。