xs:xs:StringTime格式的字符串到XMLGregorianCalendar

时间:2014-10-01 08:48:32

标签: java xml jaxb xsd

我使用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并手动输入模式?我觉得这可能是一个危险的部分。

3 个答案:

答案 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);
    }

}