You*_* Fu 83 format datetime jaxb marshalling milliseconds
当JAXB将日期对象(XMLGregorianCalendar)编组到xsd:dateTime元素中时,如何指定生成的XML的格式?
例如:默认数据格式是使用<StartDate>2012-08-21T13:21:58.000Z</StartDate>
我需要的毫秒来省略毫秒. <StartDate>2012-08-21T13:21:58Z</StartDate>
如何指定我希望它使用的输出格式/日期格式?我正在使用javax.xml.datatype.DatatypeFactory创建XMLGregorianCalendar对象.
XMLGregorianCalendar xmlCal = datatypeFactory.newXMLGregorianCalendar(cal);
Run Code Online (Sandbox Code Playgroud)
bdo*_*han 121
您可以使用a XmlAdapter来自定义日期类型如何写入XML.
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class DateAdapter extends XmlAdapter<String, Date> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public String marshal(Date v) throws Exception {
synchronized (dateFormat) {
return dateFormat.format(v);
}
}
@Override
public Date unmarshal(String v) throws Exception {
synchronized (dateFormat) {
return dateFormat.parse(v);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用@XmlJavaTypeAdapter注释指定XmlAdapter应该用于特定的字段/属性.
@XmlElement(name = "timestamp", required = true)
@XmlJavaTypeAdapter(DateAdapter.class)
protected Date timestamp;
Run Code Online (Sandbox Code Playgroud)
使用xjb绑定文件:
<jxb:javaType name="java.time.ZonedDateTime"
xmlType="xs:dateTime"
parseMethod="my.package.DateAdapter.parseDateTime"
printMethod="my.package.DateAdapter.formatDateTime" />
Run Code Online (Sandbox Code Playgroud)
将产生上述注释.
小智 16
我使用SimpleDateFormat来创建XMLGregorianCalendar,例如在这个例子中:
public static XMLGregorianCalendar getXmlDate(Date date) throws DatatypeConfigurationException {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd").format(date));
}
public static XMLGregorianCalendar getXmlDateTime(Date date) throws DatatypeConfigurationException {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(date));
}
Run Code Online (Sandbox Code Playgroud)
第一种方法创建XMLGregorianCalendar的实例,该实例由XML marshaller格式化为有效的xsd:date,第二种方法生成有效的xsd:dateTime.
| 归档时间: |
|
| 查看次数: |
84950 次 |
| 最近记录: |