2015-04-21 23 views
21

LocalDate, Java 8 ve XMLGregorianCalendar arasındaki dönüştürmenin en iyi yolu nedir? XMLGregorianCalendar içinLocalDate ve XMLGregorianCalendar arasında dönüştürme

XMLGregorianCalendar xmlCal = ...; 
Date utilDate = xmlCal.toGregorianCalendar().getTime(); 
LocalDate localDate = LocalDateTime.ofInstant(utilDate.toInstant(), ZoneId.systemDefault()).toLocalDate(); 
+0

O benziyor http://stackoverflow.com/questions/835889/java-util -date-to-xmlgregoriancalendar? answertab = oy # tab-top –

+1

@AnkurAnand Bu sorunun çok benzer olduğunu sanmıyorum - 'Date 'den' LocalDate'den dönüştürmem gerekiyordu ve ben de Her iki yönde. Cevaplar benzer olabilir, çünkü dönüşüm, "Tarih" i bir adım olarak gerektirir, ancak soru bu değildir. – maja

cevap

48

LocalDate dönüştürme:

LocalDate date = LocalDate.now(); 
GregorianCalendar gcal = GregorianCalendar.from(date.atStartOfDay(ZoneId.systemDefault())); 
XMLGregorianCalendar xcal = DatatypeFactory.newInstance().newXMLGregorianCalendar(gcal); 
+2

LocalDate'ten XMLGregorianCalendar'a dönüştürürken, GregorianCalendar'dan kaçının! Sorun şu ki, GregorianCalendar’un saat dilimi zorunlu bir alandır, ancak LocalDate’de saat dilimi bilgisi yok! – riskop

3

Eğer

LocalDate localDate = ...; 
GregorianCalendar calender = new GregorianCalendar(); 
Date utilDate = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); 
calender.setTime(utilDate);  
XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender); 

kullanabilirsiniz Ve LocalDate geri XMLGregorianCalendar dönüştürmek için XMLGregorianCalendar için LocalDate den dönüştürmek için

xcal.toGregorianCalendar().toZonedDateTime().toLocalDate(); 
7

LOCALDATE saklar sadece yıl/ay/gün bilgisi:geri dönüştürme basittir. İçinde zaman ve zaman bilgisi yok. XMLGregorianCalendar tarih (yıl/ay/gün) + isteğe bağlı olarak zaman ve isteğe bağlı olarak saat dilimi bilgilerini depolar. Yani XMLGregorianCalendar için LOCALDATE dönüştürme

basittir:, LOCALDATE için XMLGregorianCalendar dönüştürme

LocalDate in; 
XMLGregorianCalendar out; 
in = LocalDate.parse("1999-11-11"); 
out = DatatypeFactory.newInstance().newXMLGregorianCalendar(in.toString()); 

kadar basit değil olabilir XMLGregorianCalendar çünkü sadece saklayamazsınız zaman ve zaman dilimi bilgilerini olabilir LocalDate içinde.

Ancak, XMLGregorianCalendar'dan LocalDate'e dönüştürüyorsanız, XMLGregorianCalendar öğesinin nontimezoned xsd: date öğesinden (xml'de YYYY-AA-GG olarak gösterilir) kaynaklandığını tahmin ediyorum. Bu durumda böyle dönüştürmek olmalıdır:

XMLGregorianCalendar in; 
LocalDate out; 
in = DatatypeFactory.newInstance().newXMLGregorianCalendar("2011-11-11"); 
out = LocalDate.parse(in.toXMLFormat()); 

Tüm örnek: Burada cevap edilmiş olanların

{ 
     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()); 
    } 
İlgili konular