2016-12-07 3 views
1

JAX-WSでWebサービスをプログラミングしています。私は2つの日付フィールドがありますが、それらは異なるフォーマットです。例JAX-WS xs:dateTime(書式はUTCとローカル)

<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 -->

私のクラス:

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; 
    }      
} 

誰かが私を助けることができますか?

答えて

0

私はあなたが本当に何を言っているかのフィールド名に基づいて想定していますが、サービスプロバイダのローカル時間を表すxs:dateTimeを返すために、フィールドdateTimeLocalを必要としますが、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は人口です):

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分PM米国東部時間の周りにこれを実行すると、私が手:

<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>

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

のに対し、12月7日午前9時47分PMを描いているので、それは実際に12月8日、中2:47で示されていますグリニッジ標準時(UTCまたはズールー時間)。

0

おかげスコットは、一例では私の問題で正しいです私はWSをテストするときに、日付がローカルタイムゾーン(JVM)の例でフォーマットされて、私はJAXWSを使用していますということです。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:Response xmlns:ns2="http://......"> <CreateDateTime>2014-06-03T14:46:48-05:00</CreateDateTime> <LastModifiedDateTimeUTC>2014-06-13T21:09:21Z</LastModifiedDateTimeUTC>
</ns2:Response> </S:Body> </S:Envelope>

アクチュアリ私は@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); 
    } 
} 
関連する問題