2012-02-29 14 views
22

ho un appuntamento nel seguente formato nell'interfaccia utente ..data Converti in XMLGregorianCalendar

Eg: Thu. 03/01 

converto loro di XMLGregorianCalendar come di seguito spiegato.

final DateFormat format = new SimpleDateFormat("E. M/d"); 
final String dateStr = closeDate; 
final Date dDate = format.parse(dateStr); 

GregorianCalendar gregory = new GregorianCalendar(); 
gregory.setTime(dDate); 

XMLGregorianCalendar dealCloseDate = DatatypeFactory.newInstance() 
.newXMLGregorianCalendar(gregory); 

la mia uscita è "3/06/70 05:00" invece di "2011/03/06 05:00". Qual è il valore richiesto per ottenere l'anno giusto.

+0

@ Hovercraft Full Of Eels ... Mi scuso per quello. Non ho avuto alcuna risposta, quindi ho pensato che il mio Q non fosse comprensibile e ho dovuto cancellarli. Ancora una volta mi dispiace. – JNPW

risposta

50

Non hai menzionato nulla su come l'anno dovrebbe essere rappresentato in questa conversione di data, ma qui c'è qualche pseudocodice per iniziare. Si noti che non si tratta esplicitamente del fuso orario in questo esempio:

final DateFormat format = new SimpleDateFormat("E. M/d"); 
final String dateStr = "Thu. 03/01"; 
final Date date = format.parse(dateStr); 

GregorianCalendar gregory = new GregorianCalendar(); 
gregory.setTime(date); 

XMLGregorianCalendar calendar = DatatypeFactory.newInstance() 
     .newXMLGregorianCalendar(
      gregory); 
0

Ho eseguito il seguente codice per ottenere lo stesso risultato. Può essere un lungo codice, ma funziona bene.

def gregorianCalendar = new GregorianCalendar() 
    def xmlGregorianCalendar = newInstance().newXMLGregorianCalendar(gregorianCalendar) 

    if (//past date is needed) { 
     def date = xmlGregorianCalendar.toGregorianCalendar().time 
     def cal = Calendar.getInstance() 
     cal.setTime(date) 
     cal.add(Calendar.DATE,-3); //subtract 3 days 
     date.setTime(cal.getTime().getTime()) 
     gregorianCalendar.setTime(date) 
     xmlGregorianCalendar = newInstance().newXMLGregorianCalendar(gregorianCalendar) 
    }