2015-05-05 54 views
0

我有一個代碼片段,將Date轉換爲XMLGregorianCalendar,但看到結果日期後不同。不確定爲什麼要在轉換後的日期中更改。日期到XMLGregorianCalendar轉換給出錯誤結果

代碼:

public void getDate() throws ParseException { 

     Date current = null; 
     String str = "1980-10-26"; 
     DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
     Date current1 = format.parse(str);  
     XMLGregorianCalendar xmlCalendar = null; 
     xmlCalendar = Utility.convertDateToXMLGreCal(current1);  
     System.out.println("xmlCalendar: "+xmlCalendar); 
     current = Utility.convertXMLGreClndrToDate(xmlCalendar); 
     System.out.println("current1: "+current.toString()); 
    } 



public static XMLGregorianCalendar convertDateToXMLGreCal(final Date date){ 

     TimeZone zone = TimeZone.getTimeZone("UTC"); 
     GregorianCalendar gregoClndr = new GregorianCalendar(zone); 
     gregoClndr.setTime(date); 
     XMLGregorianCalendar xmlGreClndr = null; 
     try { 
      final DatatypeFactory dataTypeFactory = DatatypeFactory.newInstance(); 
      xmlGreClndr = dataTypeFactory.newXMLGregorianCalendar(gregoClndr); 

     } catch (DatatypeConfigurationException e) { 

     } 
     return xmlGreClndr; 
    } 

*

結果:

 
xmlCalendar: 1980-10-25T18:30:00.000Z 
current1: Sun Oct 26 00:00:00 IST 1980 

我期待xmlCalendar1980-10-26T00:00:00.000Z

有人可以讓我知道如何做到這一點?

+0

我對此並不熟悉,但在我看來,日期是100%正確的,只是另一個時區? – Jaques

回答

1

問題是您沒有在您的DateFormat中指定時區 - 因此正在使用系統默認時區。結果是您當地時區(IST)的午夜,但在XMLGregorianCalendar中,它以UTC形式呈現。

解決這個問題的最簡單的方法是指定UTC在你DateFormat時區:

format.setTimeZone(TimeZone.getTimeZone("UTC")); 

這樣,每個日期會被解析爲午夜說,「UTC日」,這聽起來像的開始這正是你所期待的。

+0

我在convertDateToXmlGreCal方法中將時區設置爲UTC,即原因結果以UTC格式發佈。 – Reddy

+0

@ reddy1234:但是當你調用'format.parse(str)'的時候,你正在*解析日期,就像它在本地時間一樣。 (這並不能幫助你調用兩種你沒有顯示的方法,這意味着我們不能希望重現這個問題......) –

+0

在問題中增加了兩種方法代碼,你能否請現在幫助我。 – Reddy