编组时 XMLGregorianCalendar 未以正确的格式显示
XMLGregorianCalendar not displayed in the right format when marshalled
我从数据库中获取一些日期,使用 JAXB 将它们放入从 XSD 模式派生的 类 对象中,然后将这些对象编组到 XML 文件中。
其中一个派生的 类 有一个 XMLGregorianCalendar 字段,我希望我把放在那里的日期写入 XML 文件中的 "yyyy-MM-dd'T'HH:mm:ss" 格式。
按照 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 的某处(您还没有显示相关的 Java 文件)您需要使用注释 @XmlSchemaType(name="dateTime") 设置正确的数据类型。可能你只设置了 "date" 而不是 "dateTime" 所以你的 XMLGregorianCalendar
-object 的时间部分被 JAXB 层抑制了。
另一个建议:
到目前为止,您所展示的部分似乎是双重工作 - 关于 SimpleDateFormat
的用法。如果您的输入已经是 java.util.Date
类型的对象,那么您不需要再次格式化和解析它。只需将它作为参数传递给 GregorianCalendar.setTime()
-method.
我从数据库中获取一些日期,使用 JAXB 将它们放入从 XSD 模式派生的 类 对象中,然后将这些对象编组到 XML 文件中。
其中一个派生的 类 有一个 XMLGregorianCalendar 字段,我希望我把放在那里的日期写入 XML 文件中的 "yyyy-MM-dd'T'HH:mm:ss" 格式。
按照 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 的某处(您还没有显示相关的 Java 文件)您需要使用注释 @XmlSchemaType(name="dateTime") 设置正确的数据类型。可能你只设置了 "date" 而不是 "dateTime" 所以你的 XMLGregorianCalendar
-object 的时间部分被 JAXB 层抑制了。
另一个建议:
到目前为止,您所展示的部分似乎是双重工作 - 关于 SimpleDateFormat
的用法。如果您的输入已经是 java.util.Date
类型的对象,那么您不需要再次格式化和解析它。只需将它作为参数传递给 GregorianCalendar.setTime()
-method.