Java JAX-WS xs :dateTime with format UTC and Local

标签 java xml web-services jax-ws

我正在使用 JAX-WS 编写 Web 服务。我有 2 个日期字段,但它们的格式不同。示例

<DateTimeLocal>2014-06-03T14:46:48-05:00</DateTimeLocal><!--I need the format: 2014-06-03T14:46:48 -->
<DateTimeUTC>2014-06-03T14:46:48-05:00</DateTimeUTC><!--I need the format: 2015-07-23T00:00:00Z -->

我的类(class):

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代表xs:dateTime GMT 或 UTC。这些并不是真正的格式(如 Java DateFormat ),而是时区表示。

也就是说,至少有一种方法可以做到这一点:使用 java.util.Calendar及其反射(reflect)给定相对时间的能力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):

import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
...    
Test result = new Test();
result.setDateTimeLocal(new Date());
Calendar zuluTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
result.setDateTimeUTC(zuluTime);

在美国东部时间晚上 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>

America/New_York时间为 GMT 减去 5 小时,

<DateTimeLocal>2016-12-07T21:47:04.988-05:00</DateTimeLocal>

描绘了 12 月 7 日晚上 9:47 而

<DateTimeUTC>2016-12-08T02:47:04.988Z</DateTimeUTC>

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

关于Java JAX-WS xs :dateTime with format UTC and Local,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41026516/

相关文章:

java - 如何替换 jar 文件中的类文件?

java - 使用 Java 在使用中修改文件

java - 字符串数组以及如何循环它们

java - Android登录应用程序未登录用户

c# - Linux 上的 .Net Web 服务

java - 为什么这不是有效的正则表达式

web-services - @WebServlet注解与servlet-mapping的区别

java - 在 Java 中从 CharSequence 转换为 String

sql-server - 如何在 SQL Server 中删除表中的随机换行符到 XML 文件

javascript - 解析 XML 的子项 (AJAX)