使用JAXB将XML文件中的日期解组为XMLGregorianCalendar

时间:2013-09-05 13:38:52

标签: java xml unmarshalling jaxb2

我在尝试从xml文件解组日期时遇到问题。

输入XML代码段

<request>
    <head>
        <title>Load data</title>
        <startDate>20130806</startDate>
        <startTime>20130807-055137</startTime>
    </head>
  <request>

startDate和startTime元素分别在模式文件中定义为xs:date和xs:dateTime。

在使用JAXB解组xml文件后,我在java类的startDate标记中获取值,如下所示:

XMLGregorianCalendar xcal = request.getHead().getStartDate();
Date date =  xcal.toGregorianCalendar().getTime();
System.out.println(date);

输出 Sun Jan 01 00:00:00 IST 20130806

我调试了我的代码并意识到值20130806保存在XMLGregorianCalendar的year变量中。我不确定为什么会发生这种情况,但可能的原因可能是XMLGregorianCalendar需要日期为特定格式。如何解组startDate标记,以便正确获取日期值而无需编写一些适配器而无需事先知道输入日期格式?

1 个答案:

答案 0 :(得分:2)

您的XML文档没有相应格式的xs:datexs:dateTime信息。如果应该如下:

<request>
    <head>
        <title>Load data</title>
        <startDate>2013-08-06</startDate>
        <startTime>2013-08-07T05:51:37</startTime>
    </head>
  <request>

如果您想使用其他格式,则需要使用XmlAdapter