gpt4 book ai didi

xml - xsd:dateTime 到 Java OffsetDateTime

转载 作者:数据小太阳 更新时间:2023-10-29 01:55:53 24 4
gpt4 key购买 nike

为了正确处理 xs:dateTime使用 JAXB,我必须从 String-> java.time.OffsetDateTime 编写自己的转换器.

如 XML Schema Definition 中所述,dateTime 的灵感来自 ISO 8601。我使用 OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME) 来解析 xs:dateTime ,这适用于例如

"2007-12-03T10:15:30+01:00" //or
"2007-12-03T10:15:30Z"

遗憾的是,在 xs:dateTime 中,偏移部分 is declared optional , 所以解析有效的

"2016-03-02T17:09:55"

抛出一个 DateTimeParseException

有没有DateTimeFormatter对于 OffsetDateTime,它还处理未分区的 xs:dateTime(可能带有默认时区)?

最佳答案

我不认为有内置的,但你可以在 DateTimeFormatterBuilder 的帮助下制作你自己的类。

您可以在方括号中指定一个可选的偏移量,即 [XXXXX](以匹配 "+HH:MM:ss"),然后,您可以提供默认偏移量 ( parseDefaulting ) 在它不存在的情况下。如果想默认UTC,可以设置0指定不偏移;如果您想默认为 VM 的当前偏移量,您可以使用 OffsetDateTime.now().getLong(ChronoField.OFFSET_SECONDS) 获取它。

public static void main(String[] args) {
String[] dates = {
"2007-12-03T10:15:30+01:00",
"2007-12-03T10:15:30Z",
"2016-03-02T17:09:55",
"2016-03-02T17:09:55Z"
};
DateTimeFormatter formatter =
new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd'T'HH:mm:ss[XXXXX]")
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
// or OffsetDateTime.now().getLong(ChronoField.OFFSET_SECONDS)
.toFormatter();
for (String date : dates) {
System.out.println(OffsetDateTime.parse(date, formatter));
}
}

关于xml - xsd:dateTime 到 Java OffsetDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35754786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com