2012-10-03 80 views
0

我正在使用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); 
    } 
} 
+0

使用其他toGregorianCalendar方法指定時區,語言環境和其他XMLGregorianCalendar默認值。 –

+0

問題是,我如何知道服務器的時區和區域設置。如果服務器改變它的時區或位置呢? – elcadro

+0

您可以通過向服務器詢問當前時間戳來確定服務器的時區。我的猜測是,根據你問題的日期,服務器在你的西邊是2個時區。我不知道這是否對您有所幫助,但出於這個原因,服務器上的時間戳應始終使用格林尼治標準時間(GMT)時區進行存儲。 –

回答

0

我懷疑時間戳確實指定了正確的時間,只是不顯示正確的時區。假設前者的(隱藏)時區爲+00:00,則2012-10-03T17:23:22.342與2012-10-03T19:23:22.342 + 02:00相同。

+0

我很確定,但問題是這次(2012-10-03T17:23:22.342)值與數據庫時間戳(2012-10-03T19:23:22.342)不匹配。而事情是...我該如何解決它? – elcadro

+0

java.sql.Timestamp表示即時。它實際上根本不知道時區。其默認字符串顯示位於錯誤時區的事實不會影響它的許多用途。 您提到「更新操作中的問題」。究竟出了什麼問題?你可以使用不符合要求的時間戳發佈代碼嗎? –

+0

這個問題很容易理解。當我插入內容時,webservice會將新記錄的ID和Timestamp(以XMLGregorianCalendar類型)返回給我。在那之後,我嘗試更新相同的記錄,所以我需要通過帶有Id和時間戳的bean,但很明顯我有和BD中的時間戳不匹配。 – elcadro