Convertir entre LocalDate et XMLGregorianCalendar
Quelle est la meilleure façon de convertir entre {[0] } de Java 8 et XMLGregorianCalendar
?
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();
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());
}
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();