2015-01-14 50 views
0

林特林的XMLGregoriaCalnder轉換爲特定timezome轉換XMLGregorianCalender到不同時區

基本上我通過XML

<Date>2015-01-12</Date> 
<Time>11:45:12</Time> 

Unmarchall它

<Date>2015-01-12T11:45:12</Date> 

現在我需要接受一次來自中國在將其插入DB之前將其轉換爲Newyork時間

public static XMLGregorianCalendar getDate(final XMLGregorianCalendar date) { 

    TimeZone myzone = TimeZone.getTimeZone("America/New_York"); 
    System.out.println(date + ".........."); 

    GregorianCalendar calendar = new GregorianCalendar();  
    calendar.setTimeZone(myzone); 
    calendar.set(date.getYear(), date.getMonth(), date.getDay(), 
      date.getHour(), date.getMinute(), date.getSecond()); 

    XMLGregorianCalendar xmlGregorianCalendar = null; 

    if (date != null) { 
     try { 
      xmlGregorianCalendar = DatatypeFactory.newInstance() 
        .newXMLGregorianCalendar(calendar); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    System.out.println(xmlGregorianCalendar + ".........."); 

    return xmlGregorianCalendar; 
} 

將輸出:

2014-01-10T11:45:12.......... 
2014-02-10T11:45:12.063-05:00.................... 

我需要輸出什麼:

2014-01-12T11:45:12.......... 
2014-01-11T21:45:12.......... 

任何幫助,不勝感激

回答

0

的時間差是始發時間和您的本地時間之間靜態的,所以我試圖簡單地將時區差異(13小時)添加到像這樣的原始時間:

public XMLGregorianCalendar getDate(final XMLGregorianCalendar date, final XMLGregorianCalendar time) { 

XMLGregorianCalendar date = null; 
if (date != null && time != null) { 
    try { 
    newDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(date.getYear(), date.getMonth(),  date.getDay(), 
    time.getHour(), time.getMinute(), time.getSecond(), time.getMillisecond(), 0); 
    Duration duration = DatatypeFactory.newInstance().newDurationDayTime(true, 0, 13, 0, 0); 
    newDate.add(duration); 
    } 
    catch (Exception e) { 
    LOGGER.error("Error creating date", e); 
    } 
} 
return newDate; 
+0

嘿男人...工作一種享受...會有可能設置時區?或者是否有比硬編碼小時更安全的方式??? ......再次非常感謝您的回覆......不適當的標記爲正確並且投票一個足夠的代表 – user5435ren

+0

可以使用XMLGregorianCalendar設置時區。 setTimeZone()'調用,看看它[這裏](http://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html#setTimeZone%28java.util.TimeZone%29)。 – marczeeee

+0

嘿marczeeee,Iv更新了我的問題。 Iv一直試圖實現setTimeZone()...但我只是不能讓它工作...保持輸出同一時間... arrrr – user5435ren