Jaki jest najlepszy sposób na konwersję między LocalDate
z Java 8 i XMLGregorianCalendar
?Konwersja między LocalDate a XMLGregorianCalendar
Odpowiedz
konwersji z LocalDate
do XMLGregorianCalendar
:
LocalDate date = LocalDate.now();
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault()));
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal);
Konwersja z powrotem jest prostsza:
xcal.toGregorianCalendar().toZonedDateTime().toLocalDate();
Podczas konwersji z LocalDate na XMLGregorianCalendar, unikaj GregorianCalendar! Problem polega na tym, że strefa czasowa GregorianCalendar jest polem wymaganym, ale LocalDate nie zawiera informacji o strefie czasowej! – riskop
Aby przekonwertować z LocalDate
do XMLGregorianCalendar
można użyć
LocalDate localDate = ...;
GregorianCalendar calender = new GregorianCalendar();
Date utilDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
calender.setTime(utilDate);
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
I przekonwertować XMLGregorianCalendar
powrotem do LocalDate
:
XMLGregorianCalendar xmlCal = ...;
Date utilDate = xmlCal.toGregorianCalendar().getTime();
LocalDate localDate = LocalDateTime.ofInstant(utilDate.toInstant(), ZoneId.systemDefault()).toLocalDate();
Lokalna dziennik przechowuje informacje tylko rok/miesiąc/dzień. Nie ma w nim informacji o czasie ani strefie czasowej. XMLGregorianCalendar przechowuje datę (rok/miesiąc/dzień) + opcjonalnie czas i opcjonalnie informacje o strefie czasowej.
Więc konwersji z LOCALDATE do XMLGregorianCalendar jest prosta:
LocalDate in;
XMLGregorianCalendar out;
in = LocalDate.parse("1999-11-11");
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString());
Konwersja z XMLGregorianCalendar do LOCALDATE może nie być tak proste, ponieważ XMLGregorianCalendar może mają czasu i strefy czasowej informacje, które po prostu nie można zapisać w LocalDate.
Jednak, jeśli konwertujesz z XMLGregorianCalendar na LocalDate, to XMLGregorianCalendar powstaje z elementu "xsd: date" (oznaczonego jako YYYY-MM-DD w xml). W takim przypadku należy przekształcić go tak:
XMLGregorianCalendar in;
LocalDate out;
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11");
out = LocalDate.parse(in.toXMLFormat());
Cały przykład:
{
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());
}
Jest podobny do tego, co zostało tu odpowiedzi http://stackoverflow.com/questions/835889/java-util -date-to-xmlgregoriancalendar? answerertab = głosów # tab-top –
@AnkurAnand Nie sądzę, że pytanie jest bardzo podobne - musiałem przekonwertować z 'LocalDate', a nie' Date', i zażądałem konwersji w oba kierunki. Odpowiedzi mogą być podobne, ponieważ konwersja wymaga "Data" jako pośredniego kroku, ale pytanie nie jest. – maja