What\'s the best way to convert between LocalDate from Java 8 and XMLGregorianCalendar?
The LocalDate stores only year/month/day information. There is no time nor time-zone information in it. The XMLGregorianCalendar stores date (year/month/day) + optionally time and optionally time zone information.
So converting from LocalDate to XMLGregorianCalendar is simple:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
Converting from XMLGregorianCalendar to LocalDate might be not so simple, because XMLGregorianCalendar may have time and time-zone information which you simply can't store in LocalDate.
However, I guess that if you are converting from XMLGregorianCalendar to LocalDate then the XMLGregorianCalendar is resulting from a nontimezoned xsd:date element (represented as YYYY-MM-DD in the xml). In that case you should convert it like this:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
Whole example:
{
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());
}