數據庫UTC中有數據,當我試圖讓數據的Java的ResultSet如何在UTC getTimeStamp
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);
這有什麼問題呢?
數據庫UTC中有數據,當我試圖讓數據的Java的ResultSet如何在UTC getTimeStamp
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);
這有什麼問題呢?
您的DateFormat實例最有可能在本地時間顯示值。當顯示你的價值,讓這個嘗試:
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME);
cal.setTime(ts);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss z");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(cal.getTime()));
編輯:您的評論:
如果我使用GMT,那會是一個問題的SimpleDateFormat
SimpleDateFormat能使用通用時區(GMT +/- n),RFC822和文本(「如果它們具有名稱」作爲JavaDoc狀態 - 有關名稱的信息,請參閱this post)。
java.util.Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
java.sql.Timestamp ts = resultSet.getTimestamp(PUBLISH_TIME, cal);
這應該是訣竅!
這應該被標記爲正確的答案;) – Kirby 2012-07-27 16:11:20
請注意,根據文檔http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getTimestamp%28int,% 20java.util.Calendar%29只有當底層數據庫沒有存儲時間戳信息 – arahant 2013-03-05 14:16:46
@arahant時,如果底層數據庫存儲時區(而不是時間戳)信息,那麼就沒有問題,因爲時間戳會在正確的時區。問題是時間戳存儲在沒有時區信息的UTC中,因爲Java將使用本地計算機的時區來構造時間戳記對象。 – Paul 2013-03-11 15:55:41
你告訴我們,你是問這個問題的人。你真的嘗試過了嗎?它不會給你所期望的結果嗎?如果是,那麼你期望什麼,它給出了什麼結果?當你使用自己的查詢工具時,數據庫告訴你什麼? – kdgregory 2009-09-24 01:27:40
是的,我嘗試過,是的,它沒有給出我期待的結果。數據庫具有UTC值,並且此代碼進一步將+8添加到DB中已有的值。 – kal 2009-09-24 01:48:57
我的意思是+8小時 – kal 2009-09-24 01:49:36