Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaJAX-WSXS:dateTime,格式为UTC和Local_Java_Xml_Web Services_Jax Ws - Fatal编程技术网

JavaJAX-WSXS:dateTime,格式为UTC和Local

JavaJAX-WSXS:dateTime,格式为UTC和Local,java,xml,web-services,jax-ws,Java,Xml,Web Services,Jax Ws,我正在用JAX-WS编程一个web服务。我有两个日期字段,但格式不同。范例 2014-06-03T14:46:48-05:00 2014-06-03T14:46:48-05:00 我的班级: public class Test implements Serializable { private Date dateTimeLocal; private Date dateTimeUTC; @XmlElement(name="DateTimeLocal")

我正在用JAX-WS编程一个web服务。我有两个日期字段,但格式不同。范例

2014-06-03T14:46:48-05:00

2014-06-03T14:46:48-05:00

我的班级:

public class Test implements Serializable {    
    private Date dateTimeLocal;
    private Date dateTimeUTC;

    @XmlElement(name="DateTimeLocal")
    @XmlSchemaType(name = "dateTime")
    public Date getDateTimeLocal() {
        return dateTimeLocal;
    }

    public void setDateTimeLocal(Date dateTimeLocal) {
        this.dateTimeLocal = dateTimeLocal;
    }

    @XmlElement(name="DateTimeUTC")
    @XmlSchemaType(name = "dateTime")
    public Date getDateTimeUTC() {
        return dateTimeUTC;
    }

    public void setDateTimeUTC(Date dateTimeUTC) {
        this.dateTimeUTC = dateTimeUTC;
    }                    
}

有人能帮我吗?

根据字段名,我假设您真正想说的是,您需要字段
dateTimeLocal
返回表示服务提供商本地时间的
xs:dateTime
,但您希望
dateTimeUTC
表示GMT或UTC的
xs:dateTime
。这些不是真正的格式(如Java
DateFormat
),而是时区表示

也就是说,至少有一种方法可以做到这一点:使用
java.util.Calendar
及其反映给定
java.util.TimeZone
的相对时间的能力:

package org.example.sampleservice;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import javax.xml.bind.annotation.XmlElement;

public class Test implements Serializable {

    private Date dateTimeLocal;
    private Calendar dateTimeUTC;

    @XmlElement(name="DateTimeLocal")
    public Date getDateTimeLocal() {
        return dateTimeLocal;
    }

    public void setDateTimeLocal(Date dateTimeLocal) {
        this.dateTimeLocal = dateTimeLocal;
    }

    @XmlElement(name="DateTimeUTC")
    public Calendar getDateTimeUTC() {
        return dateTimeUTC;
    }

    public void setDateTimeUTC(Calendar dateTimeUTC) {
        this.dateTimeUTC = dateTimeUTC;
    }
}
然后,在您的服务实现中(其中填充了
Test
):

在美国东部时间晚上9:47左右运行此程序,我得到:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getTestResponse xmlns:ns2="http://sampleservice.example.org/">
         <return>
            <DateTimeLocal>2016-12-07T21:47:04.988-05:00</DateTimeLocal>
            <DateTimeUTC>2016-12-08T02:47:04.988Z</DateTimeUTC>
         </return>
      </ns2:getTestResponse>
   </S:Body>
</S:Envelope>

2016-12-07T21:47:04.988-05:00
2016-12-08T02:47:04.988Z
由于美国/纽约时间是格林尼治标准时间减去5小时

2016-12-07T21:47:04.988-05:00

描述12月7日晚上9:47,鉴于

2016-12-08T02:47:04.988Z


描述它实际上是格林威治标准时间12月8日凌晨2:47(UTC或祖鲁时间)。

根据字段名称,我假设您真正想说的是,您需要字段
dateTimeLocal
返回表示服务提供商本地时间的
xs:dateTime
,但是您希望
dateTimeUTC
表示GMT或UTC的
xs:dateTime
。这些不是真正的格式(如Java
DateFormat
),而是时区表示

也就是说,至少有一种方法可以做到这一点:使用
java.util.Calendar
及其反映给定
java.util.TimeZone
的相对时间的能力:

package org.example.sampleservice;

import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;

import javax.xml.bind.annotation.XmlElement;

public class Test implements Serializable {

    private Date dateTimeLocal;
    private Calendar dateTimeUTC;

    @XmlElement(name="DateTimeLocal")
    public Date getDateTimeLocal() {
        return dateTimeLocal;
    }

    public void setDateTimeLocal(Date dateTimeLocal) {
        this.dateTimeLocal = dateTimeLocal;
    }

    @XmlElement(name="DateTimeUTC")
    public Calendar getDateTimeUTC() {
        return dateTimeUTC;
    }

    public void setDateTimeUTC(Calendar dateTimeUTC) {
        this.dateTimeUTC = dateTimeUTC;
    }
}
然后,在您的服务实现中(其中填充了
Test
):

在美国东部时间晚上9:47左右运行此程序,我得到:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getTestResponse xmlns:ns2="http://sampleservice.example.org/">
         <return>
            <DateTimeLocal>2016-12-07T21:47:04.988-05:00</DateTimeLocal>
            <DateTimeUTC>2016-12-08T02:47:04.988Z</DateTimeUTC>
         </return>
      </ns2:getTestResponse>
   </S:Body>
</S:Envelope>

2016-12-07T21:47:04.988-05:00
2016-12-08T02:47:04.988Z
由于美国/纽约时间是格林尼治标准时间减去5小时

2016-12-07T21:47:04.988-05:00

描述12月7日晚上9:47,鉴于

2016-12-08T02:47:04.988Z


描述它实际上是格林威治标准时间12月8日凌晨2:47(UTC或祖鲁时间)。

谢谢Scott,我的问题是我使用JAXWS,那么当我测试ws时,日期由本地时区(jvm)格式化示例:


2014-06-03T14:46:48-05:00
2014-06-13T21:09:21Z

我正在使用@XmlJavaTypeAdapter

public class Test implements Serializable {
    private DateTime dateTimeLocal
    private DateTime dateTimeUTC

    @XmlElement(name="DateTimeLocal")
    @XmlSchemaType(name = "dateTime")
    public DateTime getDateTimeLocal() {
        return dateTimeLocal;
    }   
    public void setDateTimeLocal(DateTime dateTimeLocal) {
        this.dateTimeLocal = dateTimeLocal;
    }
    @XmlElement(name="DateTimeUTC")
    @XmlSchemaType(name = "dateTime")
    public DateTime getDateTimeUTC() {
        return dateTimeUTC;
    }
    public void setDateTimeUTC(DateTime dateTimeUTC) {
        this.dateTimeUTC = dateTimeUTC;
    }
}

public class DateTimeUTCAdapter extends XmlAdapter<String, DateTime> {

    private static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ").withZone(DateTimeZone.forID("UTC"));

    @Override
    public DateTime unmarshal(String v) throws Exception {
         return formatter.parseDateTime(v);
    }

    @Override
    public String marshal(DateTime v) throws Exception {
        return formatter.print(v);
    }
}
公共类测试实现可序列化{
私有日期时间日期时间局部
专用日期时间日期时间UTC
@XmlElement(name=“DateTimeLocal”)
@XmlSchemaType(name=“dateTime”)
公共日期时间getDateTimeLocal(){
返回日期:本地时间;
}   
public void setDateTimeLocal(DateTime dateTimeLocal){
this.dateTimeLocal=dateTimeLocal;
}
@xmlement(name=“DateTimeUTC”)
@XmlSchemaType(name=“dateTime”)
公共日期时间getDateTimeUTC(){
返回日期UTC;
}
公共无效setDateTimeUTC(DateTime dateTimeUTC){
this.dateTimeUTC=dateTimeUTC;
}
}
公共类DateTimeUTCAdapter扩展了XmlAdapter{
专用静态DateTimeFormatter formatter=DateTimeFormat.forPattern(“yyyy-MM-dd'T'HH:MM:ssZ”).withZone(DateTimeZone.forID(“UTC”);
@凌驾
公共DateTime解组器(字符串v)引发异常{
返回格式化程序.parseDateTime(v);
}
@凌驾
公共字符串封送处理程序(DateTime v)引发异常{
返回格式化程序。打印(v);
}
}

谢谢Scott,这个例子是正确的,因为我的问题是我在使用JAXWS,然后当我测试ws时,日期是由本地时区(jvm)格式化的示例:


2014-06-03T14:46:48-05:00
2014-06-13T21:09:21Z

我正在使用@XmlJavaTypeAdapter

public class Test implements Serializable {
    private DateTime dateTimeLocal
    private DateTime dateTimeUTC

    @XmlElement(name="DateTimeLocal")
    @XmlSchemaType(name = "dateTime")
    public DateTime getDateTimeLocal() {
        return dateTimeLocal;
    }   
    public void setDateTimeLocal(DateTime dateTimeLocal) {
        this.dateTimeLocal = dateTimeLocal;
    }
    @XmlElement(name="DateTimeUTC")
    @XmlSchemaType(name = "dateTime")
    public DateTime getDateTimeUTC() {
        return dateTimeUTC;
    }
    public void setDateTimeUTC(DateTime dateTimeUTC) {
        this.dateTimeUTC = dateTimeUTC;
    }
}

public class DateTimeUTCAdapter extends XmlAdapter<String, DateTime> {

    private static DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ").withZone(DateTimeZone.forID("UTC"));

    @Override
    public DateTime unmarshal(String v) throws Exception {
         return formatter.parseDateTime(v);
    }

    @Override
    public String marshal(DateTime v) throws Exception {
        return formatter.print(v);
    }
}
公共类测试实现可序列化{
私有日期时间日期时间局部
专用日期时间日期时间UTC
@XmlElement(name=“DateTimeLocal”)
@XmlSchemaType(name=“dateTime”)
公共日期时间getDateTimeLocal(){
返回日期:本地时间;
}   
public void setDateTimeLocal(DateTime dateTimeLocal){
this.dateTimeLocal=dateTimeLocal;
}
@xmlement(name=“DateTimeUTC”)
@XmlSchemaType(name=“dateTime”)
公共日期时间getDateTimeUTC(){
返回日期UTC;
}
公共无效setDateTimeUTC(DateTime dateTimeUTC){
this.dateTimeUTC=dateTimeUTC;
}
}
公共类DateTimeUTCAdapter扩展了XmlAdapter{
专用静态DateTimeFormatter formatter=DateTimeFormat.forPattern(“yyyy-MM-dd'T'HH:MM:ssZ”).withZone(DateTimeZone.forID(“UTC”);
@凌驾
公共DateTime解组器(字符串v)引发异常{
返回格式化程序.parseDateTime(v);
}
@凌驾
公共字符串封送处理程序(DateTime v)引发异常{
返回格式化程序。打印(v);
}
}