2012-02-27 1 views
3

Je reçois une représentation Xml d'un objet XmlObject à l'aide de la méthode xmlText(). Les objets XmlDateTime sortent avec des décalages de timezone à la fin de la chaîne qui est valide selon XML Schema: dateTime. Est-il possible de forcer le XmlObject à convertir en xml avec le formatage Zulu?XmlBeans Format XmlDateTime sans informations de fuseau horaire

Obtenir ceci: 2002-10-10T12: 00: 00-05: 00 et besoin de ce lieu: 2002-10-10T17: 00: 00Z

+0

Comment construisez-vous l'instance d'objet XmlDateTime? Utilisez-vous quelque chose comme 'XmlDateTime.Factory.newInstance()' et ensuite 'setDate (...)'? –

+0

Il arrive en XML avec ce format, mais un système de suivi ne peut pas le gérer. Nous devons donc convertir au format UTC. En fait, je viens de découvrir que ce n'est plus un problème, mais je suis toujours intéressé par la façon dont je traiterais ce cas. – GrkEngineer

Répondre

3

je demandais au sujet de l'instanciation de l'objet XmlDateTime parce que J'ai rencontré un problème similaire il y a quelque temps. D'après ce que j'ai pu comprendre, la façon dont le XmlDateTime est imprimé en xml dépend de la valeur de la représentation interne, qui à son tour dépend du setter qui a été invoqué pour fournir cette valeur. Le problème était avec la méthode setDate (...). L'implémentation par défaut de XmlDateTime conserve en interne la valeur du datetime sous la forme d'un fichier org.apache.xmlbeans.GDate généré à l'aide d'un objet GDateBuilder. Lorsque vous définissez la date sur l'objet XmlDateTime, il transmet finalement la valeur à un GDateBuilder. Si vous regardez la source de la méthode setDate(), la javadoc stipule que:

Sets the current time and date based on a java.util.Date instance. 
The timezone offset used is based on the default TimeZone. (The default TimeZone is consulted to incorporate daylight savings offsets if applicable for the current date as well as the base timezone offset.) 
If you wish to normalize the timezone, e.g., to UTC, follow this with a call to normalizeToTimeZone. 

Depuis l'objet XmlDateTime a une méthode que vous pouvez tester la méthode Normaliser setGDate (...) comme ceci:

XmlDateTime xmlDateTime = XmlDateTime.Factory.newInstance(); 
xmlDateTime.setStringValue("2002-10-10T12:00:00-05:00"); 

System.out.println(xmlDateTime.xmlText()); 

GDateBuilder gdb = new GDateBuilder(xmlDateTime.getDateValue()); 
gdb.normalize(); 
xmlDateTime.setGDateValue(gdb.toGDate()); 

System.out.println(xmlDateTime.xmlText()); 

pour moi, ce imprimé:

<xml-fragment>2002-10-10T12:00:00-05:00</xml-fragment> 
<xml-fragment>2002-10-10T17:00:00Z</xml-fragment> 

C'était la seule façon que je pouvais le faire pour imprimer en UTC.

J'espère qu'il ya une meilleure façon, mais malheureusement je ne pouvais pas trouver ...

Questions connexes