我正在使用webservices,插入記錄,它返回XMLGregorianCalendar類型的時間戳值。我需要將其轉換爲java.sql.Timestamp值,所以我使用了這樣的函數。XMLGregorianCalendar到java.sql.Timestamp
public static java.sql.Timestamp getSqlTimeStamp(XMLGregorianCalendar xgc) {
if (xgc == null) {
return null;
} else {
return new Timestamp(xgc.toGregorianCalendar().getTime().getTime());
}
}
Timestamp timestamp=getSqlTimeStamp(ExitInXMLGregor.getTimestamp());
我的問題是,在服務器上,時間戳值當我插入一條記錄,看起來像這樣:2012-10-03T19:23:22.342 + 02:00
但是,當我讓我的類型轉換,我得到如下這樣的時間戳值:2012-10-03T17:23:22.342
服務器(web服務所在的位置)的時間比我的語言環境多2h,出於某種原因,我獲得我的插入語言環境時間,轉換後。 問題是我真的需要獲取服務器時間,原因在數據庫中,時間戳值與服務器匹配,並且由於時間戳的值不同,我在更新操作中遇到問題。
請,我將不勝感激任何形式的幫助。謝謝!
編輯: 我有點找到解決方案,但並不完全是我需要的。當我將java.sql.Timestamp格式的時間戳轉換爲XMLGregorian時,我設置了服務器的時區(setTimeZone(TimeZone.getTimeZone(「GMT + 02:00」)))。這實際上有效,但遠離理想的解決方案(可能發生時區甚至服務器更改)在這一點上知道服務器的時間區域是很好的,但我不知道如何。
public static XMLGregorianCalendar getXMLGregorianCalendar(Timestamp timestamp)
throws BaseException {
try {
GregorianCalendar gc = new GregorianCalendar();
gc.setTimeZone(TimeZone.getTimeZone("GMT+02:00"));
gc.setTimeInMillis(timestamp.getTime());
return DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
} catch (DatatypeConfigurationException ex) {
throw new BaseException(ex);
}
}
使用其他toGregorianCalendar方法指定時區,語言環境和其他XMLGregorianCalendar默認值。 –
問題是,我如何知道服務器的時區和區域設置。如果服務器改變它的時區或位置呢? – elcadro
您可以通過向服務器詢問當前時間戳來確定服務器的時區。我的猜測是,根據你問題的日期,服務器在你的西邊是2個時區。我不知道這是否對您有所幫助,但出於這個原因,服務器上的時間戳應始終使用格林尼治標準時間(GMT)時區進行存儲。 –