Hola, descubrimos la solución a lo que necesitas, desplázate y la verás más abajo.
Solución:
Conversión de LocalDate
a XMLGregorianCalendar
:
LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
Volver a convertir es más simple:
xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
LocalDate almacena solo información de año / mes / día. No contiene información sobre la hora ni la zona horaria. XMLGregorianCalendar almacena la fecha (año / mes / día) + opcionalmente tiempo y opcionalmente información de la zona horaria.
Entonces, convertir de LocalDate a XMLGregorianCalendar es simple:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
La conversión de XMLGregorianCalendar a LocalDate puede no ser tan simple, porque XMLGregorianCalendar mayo tiene información de hora y zona horaria que simplemente no puede almacenar en LocalDate.
Sin embargo, supongo que si está convirtiendo de XMLGregorianCalendar a LocalDate, entonces el XMLGregorianCalendar es el resultado de un elemento xsd: date no clasificado por zonas (representado como YYYY-MM-DD en el xml). En ese caso, debería convertirlo así:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
Ejemplo completo:
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());
Para convertir de LocalDate
a XMLGregorianCalendar
puedes usar
LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from( localDate.atStartOfDay( ZoneId.systemDefault() ).toInstant() );
calender.setTime(utilDate);
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
Y convertir XMLGregorianCalendar
de regreso LocalDate
:
XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant( utilDate.toInstant(), ZoneId.systemDefault() ).toLocalDate();
Te mostramos las reseñas y valoraciones de los lectores
Si guardas alguna desconfianza y disposición de desarrollar nuestro ensayo eres capaz de realizar una referencia y con deseo lo estudiaremos.