【发布时间】:2023-04-02 19:51:01
【问题描述】:
我从数据库中获取一些日期,将它们放入使用 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-06-03+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);
【问题讨论】:
-
在 JAXB 中的某个地方,您需要使用注释
@XmlSchemaType(name="dateTime")设置正确的数据类型。可能您只设置了“日期”而不是“日期时间”。 -
您的 components.date 属性的类型应为 Date 或 Calendar。 JAXB 规范声明这些类型会自动映射到模式 dateTime 类型,其 lexical format 已经与您想要的匹配。根本不需要使用 DateFormats。
-
@Meno Hochschild:你是对的。请把它写成答案,以便我接受。
标签: java xml date jaxb marshalling