【问题标题】:xs:String in xs:DateTime format to XMLGregorianCalendarxs:String 以 xs:DateTime 格式转换为 XMLGregorianCalendar
【发布时间】:2014-10-01 08:48:32
【问题描述】:

我使用 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" />

但我收到的值应该代表日期时间:

<Value>2014-08-31T15:00:00Z</Value>

有什么好的方法,如何将此字符串转换为 XMLGregorianCallendar,或者我应该使用 SimpleDateFormat 并手动键入模式?我觉得这可能是一个危险的部分。

【问题讨论】:

    标签: java xml jaxb xsd


    【解决方案1】:

    快速的谷歌搜索产生

    String mydatetime = "2011-09-29T08:55:00";
    XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(mydatetime);
    

    学分转到this blog post

    【讨论】:

      【解决方案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);
      

      【讨论】:

        【解决方案3】:

        您可以像这样在您的字段上使用@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);
            }
        
        }
        

        【讨论】:

        • 我在 com.sun.xml.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:第247章.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:689) at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158
        • @AyadiAkrem 最好有一个案例场景来评估 xml、pojo 等
        • 我就是这么做的
        猜你喜欢
        • 2020-10-22
        • 2014-10-28
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-18
        • 1970-01-01
        • 2019-08-20
        相关资源
        最近更新 更多