加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – xsd:dateTime到Java OffsetDateTime

发布时间:2020-12-16 23:14:31 所属栏目:百科 来源:网络整理
导读:为了使用JAXB正确处理 xs:dateTime,我必须从String- java.time.OffsetDateTime 编写我自己的转换器. 正如XML Schema Definition中所提到的,dateTime的灵感来自ISO 8601.我使用了OffsetDateTime.parse(s,DateTimeFormatter.ISO_OFFSET_DATE_TIME)来解析xs:da
为了使用JAXB正确处理 xs:dateTime,我必须从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.

OffsetDateTime是否有DateTimeFormatter,它还处理未分区的xs:dateTimes(可能带有默认时区)?

解决方法

我不认为有一个内置的,但你可以在 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));
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读