在「getTime」方法中,實際做過本地時區轉換的人員是您自己的代碼。正如你在調試中看到的,你的「xmlGregorianCalendar」仍然有客戶端發送的原始時間和時區(至少如果Web服務參數類型是「XmlGregorianCalendar」,就好像它是「Date」一樣,轉換確實發生在代碼背後的服務層)。
我遇到了同樣的問題,即使我在這裏試圖幫助你,我還沒有找到一個好的解決方案。但我找到了一個:
import java.util.Calendar;
import java.util.Date;
import javax.xml.datatype.XMLGregorianCalendar;
...
public Date webserviceDateToJavaDateKeepingOriginalTime(XMLGregorianCalendar webserviceDate) {
Calendar calendar = Calendar.getInstance();
calendar.set(
webserviceDate.getYear(),
webserviceDate.getMonth(),
webserviceDate.getDay(),
webserviceDate.getHour(),
webserviceDate.getMinute(),
webserviceDate.getSecond());
return calendar.getTime();
}
現在,它解決了我的問題,保持客戶端的時間。我相信在將來我會被迫做一些事情,比如在數據庫中存儲客戶端時區以及日期和時間,這樣我就可以在UI中顯示原始時間或轉換後的數據(本地時間),這將取決於場景。
我建議你閱讀this post。
@Solomon你已經回答了,因爲我也一樣。 –