Convertir entre LocalDate et XMLGregorianCalendar
Quel est le meilleur moyen pour convertir entre LocalDate
de Java 8 et XMLGregorianCalendar
?
- C'est similaire à ce qui a été répondu ici stackoverflow.com/questions/835889/...
- Je ne pense pas que la question est très semblable - je besoin pour convertir
LocalDate
, pasDate
, et je l'ai invitée pour une conversion dans les deux sens. Les réponses pourraient être similaires, car la conversion nécessiteDate
comme un entre-deux-étape, mais la question n'est pas.
Vous devez vous connecter pour publier un commentaire.
La conversion de
LocalDate
àXMLGregorianCalendar
:La conversion de dos est plus simple:
LocalDate.parse("1902-07-10").atStartOfDay(ZoneId.of("Asia/Riyadh"))
entraînera1902-07-10T00:00+03:06:52[Asia/Riyadh]
avec le fuseau horaire de la valeur03:06:52
La LocalDate magasins de la seule année/mois/jour de l'information. Il n'y a pas de temps ni de temps de la zone informations. Le XMLGregorianCalendar stocke la date (année/mois/jour) + éventuellement temps et éventuellement informations de fuseau horaire.
La conversion de LocalDate à XMLGregorianCalendar est simple:
La conversion de XMLGregorianCalendar à LocalDate peut-être pas si simple, parce que XMLGregorianCalendar peut avez le temps et l'heure de la zone, les informations que vous simplement ne pouvez pas stocker dans LocalDate.
Cependant, je suppose que si vous êtes à la conversion de XMLGregorianCalendar à LocalDate puis le XMLGregorianCalendar est issu d'une nontimezoned xsd:date élément (représenté sous la forme AAAA-MM-JJ dans le xml). Dans ce cas, vous devez le convertir comme ceci:
Ensemble de l'exemple:
Pour convertir
LocalDate
àXMLGregorianCalendar
vous pouvez utiliserEt de convertir
XMLGregorianCalendar
retour àLocalDate
:Ce qui suit est un moyen simple de convertir de LocalDate à XMLGregorianCalendar qui préserve à la fois l'indéfini champs (heures, fuseau horaire, etc.) et est efficace (c'est à dire pas de conversion/de Chaîne). Contrairement à d'autres solutions de ce résultats en XML dates sans fuseaux horaires, par exemple
<date>2018-11-06</date>
au lieu de<date>2018-11-06+01:00</date>
.La conversion de dos est un peu plus simple: