加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 这是一个有效的日期格式 – 2007-12-13 01:00?

发布时间:2020-12-15 04:24:57 所属栏目:Java 来源:网络整理
导读:我们有一个非常奇怪的情况.我们期望来自Web服务的一些数据然后我们用 java代码处理它.突然,它开始失败. 我们发现,我们以这样的格式收到日期:2007-12-13 01:00并抛出异常:java.lang.NumberFormatException:无效的日期/时间.我们使用JAXB对响应进行Marshall
我们有一个非常奇怪的情况.我们期望来自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

你的错误

We found out,that we receive the date in such format:
2007-12-13+01:00 and it throws out an exception:
java.lang.NumberFormatException: Invalid date/time

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读