Qual è il modo migliore per convertire tra LocalDate
da Java 8 e XMLGregorianCalendar
?Conversione tra LocalDate e XMLGregorianCalendar
risposta
Conversione da LocalDate
a XMLGregorianCalendar
:
LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
La riconversione è più semplice:
xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
Durante la conversione da LocalDate a XMLGregorianCalendar, evitare GregorianCalendar! Il problema è che il fuso orario di GregorianCalendar è obbligatorio, ma LocalDate non contiene informazioni sul fuso orario! – riskop
convertire da LocalDate
a XMLGregorianCalendar
è possibile utilizzare
LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
calender.setTime(utilDate);
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
E per convertire XMLGregorianCalendar
tornare a LocalDate
:
XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant(utilDate.toInstant(), ZoneId.systemDefault()).toLocalDate();
I negozi LocalDate solo informazioni di anno/mese/giorno. Non ci sono tempo né informazioni sul fuso orario. La data di archiviazione XMLGregorianCalendar (anno/mese/giorno) + facoltativamente ora e facoltativamente informazioni sul fuso orario.
Quindi la conversione da LocalDate a XMLGregorianCalendar è semplice:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
Conversione da XMLGregorianCalendar a LocalDate potrebbe non essere così semplice, perché XMLGregorianCalendar possono avere il tempo e fuso orario informazioni che semplicemente non si può memorizzare in LocalDate.
Tuttavia, suppongo che se si esegue la conversione da XMLGregorianCalendar a LocalDate, XMLGregorianCalendar deriva da un elemento xsd: date non timezonato (rappresentato come YYYY-MM-DD in xml). In questo caso si dovrebbe convertirlo in questo modo:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
intero esempio:
{
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());
}
E 'simile a quello che è stato risposto qui http://stackoverflow.com/questions/835889/java-util -date-to-xmlgregoriancalendar? answertab = voti # tab-top –
@AnkurAnand Non penso che la domanda sia molto simile - avevo bisogno di convertire da 'LocalDate', non' Date', e ho richiesto una conversione in entrambe le direzioni. Le risposte potrebbero essere simili perché la conversione richiede "Data" come passaggio intermedio, ma la domanda non lo è. – maja