XML 生成后的 JAXB 日期时间格式

xwh*_*hyz 5 java xml date jaxb

我有一个简短的问题:

从 xsd 生成 xjc 类之后,我的对象需要日历,这就是我提供的。但是在将其编组为 XML 后,我的日期格式如下:

<InfoDateTime v="2013-09-03T00:00:00+02:00"/>
Run Code Online (Sandbox Code Playgroud)

而我想要:

<InfoDateTime v="2013-09-03T00:00:00Z"/>
Run Code Online (Sandbox Code Playgroud)

我不使用带注释的 jaxb 而是使用绑定文件,但是否可以不创建可以解析日期和字符串的类?

谢谢!

bdo*_*han 0

使用时Calendar您可以设置TimeZone您想要使用的:

Java模型

下面是一个简单的 Java 对象,它有 2 个映射Calendar字段。

import java.util.Calendar;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    Calendar defaultTimeZone;
    Calendar setTimeZone;

}
Run Code Online (Sandbox Code Playgroud)

演示代码

演示

在下面的演示代码中,我们将创建两个实例,Calendar它将defaultTimeZone具有默认时区(我的环境是加拿大/东部),并且setTimeZone我们将指定 GMT。

import java.util.*;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Root root = new Root();
        root.defaultTimeZone = Calendar.getInstance();

        root.setTimeZone = Calendar.getInstance();
        root.setTimeZone.setTimeZone(TimeZone.getTimeZone("GMT"));

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <defaultTimeZone>2013-09-03T09:40:59.443-04:00</defaultTimeZone>
    <setTimeZone>2013-09-03T13:40:59.443Z</setTimeZone>
</root>
Run Code Online (Sandbox Code Playgroud)