当编组

时间:2015-06-09 12:58:40

标签: java xml date jaxb marshalling

我从数据库中获取了一些日期,将它们放入使用JAXB从XSD架构派生的类的对象中,然后将对象编组到XML文件中。

其中一个派生类有一个XMLGregorianCalendar字段,我想把我放在那里的日期写成“yyyy-MM-dd'T'HH:mm:ss”格式的XML文件。

按照this问题的答案提供的说明并未解决我的问题。这就是我正在做的事情:

String formattedDate = sdf.format(dateFromTheDatabase);
        gc1 = convertStringToXmlGregorian(formattedDate);
        gc1.setTimezone(60);
components.setDate(gc1);

我正在使用的功能(或多或少地从对上述链接问题的回答中复制):

public XMLGregorianCalendar convertStringToXmlGregorian(String dateString)     throws DatatypeConfigurationException
{
    try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
            java.util.Date date = sdf.parse(dateString);
            GregorianCalendar gc = (GregorianCalendar) GregorianCalendar.getInstance();
            gc.setTime(date);
            return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        } 
}

当我整理我填充的对象时,我在XML中得到的日期:

2015年6月3日+ 01:00

...而我希望我的日期采用这种格式:

2015-06-03T00:00:00

我也尝试过的事情:

  • 替换
      “yyyy-MM-dd HH:mm:ss”

      “yyyy-MM-dd'T'HH:mm:ss”

  • 替换

        DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);    
    

        DatatypeFactory.newInstance().newXMLGregorianCalendar(
        gc.get(Calendar.YEAR), gc.get(Calendar.MONTH) + 1, gc.get(Calendar.DAY_OF_MONTH),
        gc.get(Calendar.HOUR_OF_DAY), 0,0,0,60);
    

1 个答案:

答案 0 :(得分:1)

好的,现在我的评论作为回答:

在JAXB的某个地方(您还没有显示相关的Java文件),您需要使用注释@XmlSchemaType(name =" dateTime")设置正确的数据类型。可能你只设置了" date"而不是" dateTime"所以XMLGregorianCalendar - 对象的时间部分已被JAXB层抑制。

另一个建议:

到目前为止,您提供的内容似乎部分是双重工作 - 关于SimpleDateFormat的使用。如果您的输入已经是java.util.Date类型的对象,那么您不需要再次格式化和解析它。只需将其作为参数传递给GregorianCalendar.setTime() - 方法。