Saltar al contenido

Convertir entre LocalDate y XMLGregorianCalendar

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *