java – 这是一个有效的日期格式 – 2007-12-13 01:00?
我们有一个非常奇怪的情况.我们期望来自Web服务的一些数据然后我们用
java代码处理它.突然,它开始失败.
我们发现,我们以这样的格式收到日期:2007-12-13 01:00并抛出异常:java.lang.NumberFormatException:无效的日期/时间.我们使用JAXB对响应进行Marshall并期望日期为java.util.Date.到目前为止,我没有找到任何处理日期,没有修剪,转换或任何东西的代码行.只是编组. 现在,对于这种格式是正确还是不正确以及是谁造成了这个问题存在争议.有趣的是,最近java代码中没有做任何更改,唯一的区别在于构建它的计算机. 这可能是由不同的java版本,ANT配置引起的?你有什么建议可以导致这样的问题吗?如果您有任何问题,请询问.如果有可能,我会尽力回答. LOG 解决方法
这是一个有效的日期格式 – 2007-12-13 01:00?
是的,请参阅以下链接以获取格式的官方说明: > http://www.w3.org/TR/xmlschema-2/#date-lexical-representation 你的错误
java.lang.NumberFormatException: Invalid date/time at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:180) at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:502) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:171) at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141) at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236) at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384) at org.apache.axis.client.Call.invoke(Call.java:2467) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) 这似乎是Axis中的错误而不是JAXB. 在JAXB中处理此格式 下面是在JAXB中使用此格式的示例. Java模型 在此示例中,我们将使用Date,Calendar和XMLGregorianCalendar来处理日期: import java.util.*; import javax.xml.bind.annotation.*; import javax.xml.datatype.XMLGregorianCalendar; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Foo { private Date date; private Calendar cal; private XMLGregorianCalendar xgc; } 演示代码 input.xml中 下面是我们将解组的XML文档,请注意所有日期值与您的问题中的相同. <?xml version="1.0" encoding="UTF-8"?> <foo> <date>2007-12-13+01:00</date> <cal>2007-12-13+01:00</cal> <xgc>2007-12-13+01:00</xgc> </foo> 演示 下面是一些演示代码,我们将解组XML文档以填充每个日期字段,然后将对象封送回XML. import javax.xml.bind.*; import java.io.File; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Foo.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("input.xml"); Foo foo = (Foo) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); marshaller.marshal(foo,System.out); } } 产量 下面是运行演示代码的输出,我们看到所有值都已正确转换.请注意,日期和日历值默认为默认的dateTime表示.您可以使用@XmlSchemaType批注来控制它. <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <foo> <date>2007-12-12T18:00:00-05:00</date> <cal>2007-12-13T00:00:00+01:00</cal> <xgc>2007-12-13+01:00</xgc> </foo> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |