2011-11-04 92 views
0

我是Oracle的新手,一直在試圖理解Oracle DATE類型的工作原理。Oracle日期比較和時區

我有一個帶有時區信息的Java Date對象。據我所知,Java Date對象被標準化爲1970年1月1日以來的毫秒數。這個Date對象然後通過JDBC API保存到數據庫中。準備好的語句如下所示:

ps.setTimestamp(index,new java.sql.Timestamp.Timestamp(date.getTime()));

這是爲了捕獲日期和時間信息。

與此索引對應的數據庫列的類型爲oracle DATE。當我將此java.sql.Timestamp.Timestamp對象值存儲到Oracle DATE字段中時,是否存儲規範化日期(自1970年1月1日以來的毫秒數)?因此,無論數據庫位於哪個時區,存儲在oracle DATE列中的數據都是相同的標準化數據,是正確的嗎?

如果我在SYSDATE中比較where子句中的這個DATE列,SYSDATE在比較完成後也會被標準化。我不確定oracle的比較是如何完成的,因爲oracle服務器可以處於不同的時區。

在此先感謝。

+0

DATE類型將日期的時間部分存儲到第二個粒度,如果您需要進一步的細節,那麼您應該考慮一個TIMESTAMP類型(http://www.databasejournal.com/features/oracle/article.php /2234501/A-Comparison-of-Oracles-DATE-and-TIMESTAMP-Datatypes.htm)。有關DATE類型的時區支持的完整細分:http://download.oracle.com/docs/cd/B19306_01/server.102/b14225/ch4datetime.htm – Ollie

回答

0

兩個DATE值都將被標準化。

當我做了簡單的Oracle查詢使用Jython:

rs = c.executeQuery("select sysdate from dual") 
while (rs.next()): 
    print('%s' % (SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z").format(rs.getTimestamp(1)))) 

我:

2011-11-04 09:58:00 +0100 

雖然我住在波蘭,我們有 '+0100' 時區。