2013-01-04 164 views
5

中歐夏令時開始於三月的上個星期天。我們從02:00到03:00設置我們的時鐘。如果我在數據庫請求中進行時間標記計算會發生什麼 - 讓我們在01:59說?使用夏令時計算時間戳

UPDATE sessions SET aliveuntil = (CURRENT_TIMESTAMP + INTERVAL '1' MINUTE) WHERE id = ? 

作爲結果還是02:00得到03:00?

如果我們將時鐘從03:00設置爲02:00,那麼周圍的情況如何呢?

SELECT id FROM sessions WHERE aliveuntil < (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE) 

時間從03:00改變到02:00 ... (CURRENT_TIMESTAMP - INTERVAL '1' MINUTE)在02:00發生了什麼?是02:59還是01:59?

這應該如何處理?最佳實踐以及Oracle數據庫11g版本11.2.0.2.0如何處理(在我的情況下)?

回答

3

如果我正確理解他們的文檔,這取決於如何在數據庫中設置表/列。如果列設置爲使用WITH TIME ZONE,則Oracle會自動確定正確的/相關的值。在上面的例子中,如果aliveuntil列有此設置,那麼如果您嘗試在1:59添加1分鐘,則時間將更新爲3:00。

這裏是一個有用的文章中,我的對象體內發現:

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm

向下滾動到文章的底部,你會看到你在找什麼。

下面是文章的一部分,我發現有關:

例如,在美國,當時的東部地區,從上午1時59分59秒至3:00:00 變化夏令時 生效時。 02:00:00至02:59:59之間的時間間隔不存在 。該間隔中的值無效。