626 votes

java.util.Date vers XMLGregorianCalendar

N'existe-t-il pas un moyen pratique de passer d'une date java.util.Date à un calendrier XMLGregorianCalendar ?

1 votes

Pour info : ces deux classes terribles ont été supprimées il y a des années par la java.time classes définies dans la norme JSR 310. Voir ZonedDateTime et de nouvelles méthodes de conversion ajoutées aux classes existantes. Détails dans cette réponse par Ole V.V.

1054voto

Ben Noland Points 10060
GregorianCalendar c = new GregorianCalendar();
c.setTime(yourDate);
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);

5 votes

Est-il possible de conserver la fonction getInstance() comme une variable statique dans une classe de convertisseur ? J'ai essayé de chercher dans la JavaDoc mais je n'ai rien trouvé. Il est difficile de savoir s'il y aura des problèmes en cas d'utilisation simultanée ?

36 votes

Si vous êtes prêt à utiliser JodaTime, vous pouvez faire cela en une seule ligne : DatatypeFactory.newInstance().newXMLGregorianCalendar(new DateTime().toGregorianCalendar())

4 votes

XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar(YYYY, MM, DD)) ;

205voto

Nuno Furtado Points 2685

Pour ceux qui se retrouveraient ici en cherchant la conversion inverse (de XMLGregorianCalendar à Date ) :

XMLGregorianCalendar xcal = <assume this is initialized>;
java.util.Date dt = xcal.toGregorianCalendar().getTime();

31voto

sasuke Points 1295

Voici une méthode pour convertir un calendrier grégorien en calendrier XMLGregorianCalendar ; je vous laisse le soin de convertir une date java.util.Date en calendrier grégorien :

import java.util.GregorianCalendar;

import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class DateTest {

   public static void main(final String[] args) throws Exception {
      GregorianCalendar gcal = new GregorianCalendar();
      XMLGregorianCalendar xgcal = DatatypeFactory.newInstance()
            .newXMLGregorianCalendar(gcal);
      System.out.println(xgcal);
   }

}

EDIT : Slooow :-)

7 votes

Il s'agit d'une solution pour convertir le calendrier grégorien en calendrier grégorien XML et non pas ce qui est indiqué dans la question.

23voto

Chris Knight Points 7946

Un exemple en une ligne utilisant Joda-Time bibliothèque :

XMLGregorianCalendar xgc = DatatypeFactory.newInstance().newXMLGregorianCalendar(new DateTime().toGregorianCalendar());

Crédit à Nicolas Mommaerts de son commentaire dans la réponse acceptée .

12voto

khylo Points 1928

J'ai juste pensé que je devais ajouter ma solution ci-dessous, puisque les réponses ci-dessus ne répondaient pas à mes besoins exacts. Mon schéma Xml exigeait des éléments Date et Heure séparés, et non un seul champ DateTime. Le constructeur standard de XMLGregorianCalendar utilisé ci-dessus génère un champ DateTime.

Notez qu'il y a quelques gothiques, comme le fait de devoir ajouter un au mois (puisque java compte les mois à partir de 0).

GregorianCalendar cal = new GregorianCalendar();
cal.setTime(yourDate);
XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), 0);
XMLGregorianCalendar xmlTime = DatatypeFactory.newInstance().newXMLGregorianCalendarTime(cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), 0);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X