Convertir entre LocalDate et XMLGregorianCalendar

Quelle est la meilleure façon de convertir entre {[0] } de Java 8 et XMLGregorianCalendar?

30
demandé sur maja 2015-04-21 11:42:02

3 réponses

Conversion à partir de LocalDate à XMLGregorianCalendar:

LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);

La conversion est plus simple:

xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
62
répondu JodaStephen 2015-04-21 11:06:28

La LocalDate ne stocke que les informations Année/Mois/Jour. Il n'y a pas d'informations sur l'heure ni le fuseau horaire. Le xmlgregoriancalendar stocke la date (Année / Mois / Jour) + éventuellement heure et éventuellement informations de fuseau horaire.

La conversion de LocalDate en XMLGregorianCalendar est donc simple:

LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());

La conversion de XMLGregorianCalendar en LocalDate n'est peut-être pas si simple, car XMLGregorianCalendar Peut avoir des informations sur l'heure et le fuseau horaire que vous ne peut tout simplement pas stocker dans LocalDate.

Cependant, je suppose que si vous convertissez de XMLGregorianCalendar en LocalDate, le xmlgregoriancalendar résulte d'un élément xsd:date Non temporisé (représenté par YYYY-MM-DD dans le xml). Dans ce cas, vous devriez le convertir comme ceci:

XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());

Exemple entier:

    {
        LocalDate in;
        XMLGregorianCalendar out;
        in = LocalDate.parse("1999-11-11");
        out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
        System.out.println("in: " + in.toString());
        System.out.println("out: " + out.toXMLFormat());
    }
    {
        XMLGregorianCalendar in;
        LocalDate out;
        in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
        out = LocalDate.parse(in.toXMLFormat());
        System.out.println("in: " + in.toXMLFormat());
        System.out.println("out: " + out.toString());
    }
9
répondu riskop 2017-10-18 07:16:20

Pour convertir à partir de LocalDate à XMLGregorianCalendar vous pouvez utiliser

LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from( localDate.atStartOfDay( ZoneId.systemDefault() ).toInstant() );
calender.setTime(utilDate);     
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);

Et pour convertir XMLGregorianCalendar en LocalDate:

XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant( utilDate.toInstant(), ZoneId.systemDefault() ).toLocalDate();
4
répondu maja 2015-04-21 08:42:02