JAX-WS,日期时区被误解

时间:2011-12-09 13:02:33

标签: java datetime jax-ws

我的Web服务的客户端正在以下列格式(ISO)发送日期属性:

2011-09-12T13:46:00+01:00

对于当地时间13:46发送的请求(CEST)。我的Web服务(Glassfish上的JAX-WS),写成:

@WebMethod    
public String getSource(Long id, Date asOfDate) {
    this.log.debug(asOfDate);
    // ...
}

解释为Mon Sep 12 14:46:00 CEST 2011(这是上述日志命令的输出)。为什么不被解释为Mon Sep 12 13:46:00 CEST 2011

4 个答案:

答案 0 :(得分:1)

我不知道为什么它没有正确解析时间,但我会尝试将Date参数更改为Calendar参数。

答案 1 :(得分:1)

正如U Mad所说 - Java中的日期类型没有时区。如果您要从Web服务的XML模式开始,然后使用wsimport生成Java实现,您会注意到它将使用XMLCalendar(如果您愿意,可以通过JAXB自定义映射到常规日历)

答案 2 :(得分:0)

这是一个例子。 JAXB XML文件如下所示:

<xs:schema elementFormDefault="qualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0" targetNamespace="calendar-schemalet">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:globalBindings>
                <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDate" printMethod="javax.xml.bind.DatatypeConverter.printDate" />
            </jaxb:globalBindings>
        </xs:appinfo>
    </xs:annotation>
</xs:schema>

使用命令 wsimport -p&lt;生成工件的包&gt; -b。&lt; jaxb.xml文件的路径&gt; /jaxb.xml -d&lt; dir将生成上述工件&gt; -a -keep&lt; wsdl url&gt;

答案 3 :(得分:0)

但这是正确答案..?

2011-09-12T13:46:00+01:00

2011-09-12 at 12:46:00 UTC。

在CEST(中欧夏令时,UTC +2小时)中要求:

2011-09-12 at 14:46:00

这是有道理的。