2016-12-07 1 views
1

Je suis en train de programmer un service Web avec JAX-WS. J'ai 2 champs de date mais ils sont avec des formats différents. exempleJava JAX-WS xs: dateTime au format UTC et local

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

Ma classe:

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

quelqu'un peut me aider?

Répondre

0

Je suppose sur la base des noms de champ ce que vous vraiment dire est que vous devez le champ dateTimeLocal pour retourner le xs:dateTime représentant heure locale du fournisseur de services, mais vous voulez dateTimeUTC pour représenter le xs:dateTime de GMT ou UTC. Ce ne sont pas vraiment des formats (comme Java DateFormat) mais plutôt des représentations de fuseaux horaires.

Cela dit, voici au moins une façon de le faire: en utilisant java.util.Calendar et sa capacité à refléter le temps par rapport à une donnée 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; 
    } 
} 

Ensuite, dans votre mise en œuvre de services (où Test est peuplée):

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

L'exécution de ce vers 21h47 heure de l'Est des États-Unis, je reçois:

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

Depuis America/New_York heure GMT moins 5 heures,

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

représente 7 Décembre 21:47 alors

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

représente il est en fait 8 Décembre 02:47 dans Temps moyen de Greenwich (temps UTC ou Zulu).

0

Merci Scott, l'exemple est correct par mon problème est que je suis utiliser JAXWS, puis quand je teste les ws la date est mis en forme par fuseau horaire (JVM) exemple:

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

Actuality je suis utiliser @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); 
    } 
}