我使用JAXB来取消/编组从服务器获取的XML消息。通常我在字段中获取XMLGregorianCalendar值,在描述XSD文件中定义为xs:dateTime,因此转换为XMLGregorianCalendar由JAXB自动完成。
来自XSD文件的示例
<xs:attribute name="readouttime" use="required" type="xs:dateTime" />
然而,一个字段被定义为xs:string,如下所示:
<xs:element minOccurs="1" maxOccurs="1" name="Value" type="xs:string" />
但我收到一个代表dateTime的值:
<Value>2014-08-31T15:00:00Z</Value>
有什么好方法,如何将此字符串转换为XMLGregorianCallendar,还是应该使用SimpleDateFormat并手动输入模式?我觉得这可能是一个危险的部分。
答案 0 :(得分:5)
快速Google搜索产生
String mydatetime = "2011-09-29T08:55:00";
XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(mydatetime);
积分转到this blog post。
答案 1 :(得分:2)
我的想法
String time = "yourTimeStamp";
SimpleDateFormat f = new SimpleDateFormat("yourFormat");
Date myDate = f.parse(time);
GregorianCalendar c = new GregorianCalendar();
c.setTime(myDate);
XMLGregorianCalendar myDate2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
答案 2 :(得分:1)
您可以在此字段中使用@XmlJavaTypeAdapter
..
@XmlElement(name = "string", required = true)
@XmlJavaTypeAdapter(DateAdapter.class)
protected XMLGregorianCalendar value;
DateAdapter.java
import java.text.SimpleDateFormat;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
public class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> {
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public String marshal(XMLGregorianCalendar v) throws Exception {
return dateFormat.format(v);
}
public XMLGregorianCalendar unmarshal(String v) throws Exception {
return DatatypeFactory.newInstance().newXMLGregorianCalendar(v);
}
}